2017-12-11 2 views
0

私は、MySQLのテーブルを持っている: コンボ列は、私は7.00MIN()価格を取得しようとしているMySQLのJSON:選択する方法MIN()値

id | combo 
1 | {"qty": "2", "variations": [{"name": "Cover", "value": "Paperback"}], "price": "14.00"} 
2 | {"qty": "1", "variations": [{"name": "Cover", "value": "Hardback"}], "price": "7.00"} 
3 | {"qty": "1", "variations": [{"name": "Cover", "value": "Paperback"}], "price": "15.00"} 

JSONデータ型ですが、彼らはしているよう文字列の場合、14.00を返します。

これはできますか?ここに私が試したものです:

SELECT   
JSON_UNQUOTE(MIN(combo->'$.price')) AS min_price 
FROM itemListings 
GROUP BY id 

私はまた、保存された価格の前後に引用符を削除しようとしたが、それは同じ結果が得られました。

答えて

1

あなたのコードはの字句編集的なを与えています。文字列をソートするとき"1""7"前に出たとき、文字列は"14.00""7:00"であるにもかかわらず、ちょうど"apple"よう"apple""bat"よりも長いにもかかわらず、"bat"の前に来ます。

あなたは数値最小にしたいので、10進数に値をキャスト:

SELECT 
    id, -- you probably want the select the grouped by value too 
    MIN(CAST(combo->'$.price' AS DECIMAL(10,2))) AS min_price 
FROM itemListings 
GROUP BY id 
+0

は魅力を働きました!あなたの素早い答えに感謝します。 – Gdev

関連する問題