MySQL JSON: как выбрать значение MIN ()

0

У меня есть таблица MySQL: Комбинированная колонка - это тип данных JSON

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"}

Я пытаюсь получить MIN() цена 7.00 но, поскольку они строки, он возвращает 14.00.

Это можно сделать? Вот что я пробовал:

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

Я также попытался удалить котировки вокруг сохраненных цен, но он дал те же результаты.

Теги:

1 ответ

1
Лучший ответ

Ваш код дает вам лексикографический минимум; при сортировке строк "1" появляется перед "7", несмотря на то, что строки "14.00" и "7:00", так же, как "apple" появляется перед "bat", несмотря на то, что "apple" длиннее, чем "bat".

Вы хотите числовой минимум, поэтому приведите значение к десятичному числу:

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
    Работал шарм! Большое спасибо за ваш быстрый ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню