В ваших данных приведены результаты только для 4 ключей, а в ваших данных их больше.Вот решение, если вы хотите получить результаты для фиксированного набора ключей;он использует подзапрос для вывода списка ключей, которые следует учитывать, и условное агрегирование во внешнем запросе;JSON_EXTRACT
позволяет получить доступ к содержимому объектов:
SELECT
v.val,
AVG(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS average,
MAX(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS max_value,
MIN(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS min_value,
SUM(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS sum_value,
COUNT(JSON_EXTRACT(js, CONCAT('$.', v.val))) AS count_data
FROM t
CROSS JOIN (
SELECT 'a' val UNION ALL SELECT'b' UNION ALL SELECT'c' UNION ALL SELECT'd'
) v
GROUP BY v.val
Демонстрация на DB Fiddle :
| val | average | max_value | min_value | sum_value | count_data |
| --- | ------- | --------- | --------- | --------- | ---------- |
| a | 1.5 | 2 | 1 | 3 | 2 |
| b | 6.3333 | 8 | 1 | 19 | 3 |
| c | 20.5 | 21 | 20 | 41 | 2 |
| d | 7 | 7 | 7 | 7 | 1 |
Если значения вашего тега находятся в диапазоне от a
до z
, одним (некрасивым, но работающим) решением является расширение подзапроса с помощью дополнительных UNION ALL SELECT
s.