Вы не можете контролировать порядок элементов в массиве, который генерирует json_arrayagg()
, даже в MySQL 8.0, как объяснено в документации :
Агрегирует результирующий набор как один массив JSON, элементы которого состоят из строк. Порядок элементов в этом массиве не определен.
Уродливое и не масштабируемое решение заключается в использовании group_concat()
для генерации массива json вручную:
select
dashboard,
widget,
...
concat(
'[',
group_concat(
json_object('color_mode', color_mode, ...)
order by <your_ordering_clumn>
),
']'
) js_array
from datadog_wigets_markers
group by dashboard, widget, ...
Это не удастся для длинных json строк. Я предпочел бы попытаться использовать json_arrayagg()
и неупорядоченные массивы.
Примечание: вы должны перечислить все неагрегированные столбцы в предложении group by
; это требование в большинстве баз данных и хорошая практика кодирования.