![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Внезапно я осознал, что не понимаю, как из поля типа JSON выбрать, например, наибольшее из значений.
CREATE TABLE test ( i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, j JSON ); INSERT INTO test (j) VALUES ('[10, 20, 30]'), ('[100, 500]');
mysql> SELECT * FROM test; +---+--------------+ | i | j | +---+--------------+ | 1 | [10, 20, 30] | | 2 | [100, 500] | +---+--------------+
Как выглядит запрос, который для каждой записи выберет максимальное число из массивов в колонке j?
Неактивен
LazY, полагаю, тебе сюда смотреть
https://dev.mysql.com/doc/refman/8.0/en … json-table
Неактивен
Похоже, что такого типа функции в MySQL еще не поддерживаются. Задача похожа на вычисление суммы элементов массива JSON. Для этого предлагают написать хранимую функцию:
https://stackoverflow.com/a/45297362
Функция для MAX полностью аналогична.
Неактивен
Единственное решение здесь действительно через JSON_TABLE(), как все и говорили.
На мой взгляд, серьезная недоработка со стороны разработчиков MySQL:
1. Нужно добавлять в запрос не только дополнительную таблицу, но еще и группировку. Причем сходу не разберешься, как такой запрос надо писать, потому что JOIN тут необычный, а специально мутировавший для конкретно этого случая.
2. Таким образом нельзя построить виртуальные колонки и, как следствие, индексы по ним. Если нужно по такому сортировать, придется гонять по всей таблице
Оставлю тут наглядный пример. Может, кому пригодится:
Неактивен
Страниц: 1