MYSQL JSON 按值排序
MYSQL JSON ordering by values
我正在使用 JSON 类型将一些数据存储在 table 中,我在获取数据时遇到了一些排序问题。
示例数据:
{"574161434674462720":1,"870013663581437952":6,"903739315782320168":3,"913739315950071829":1}
此处的 json 在存储时按其键排序,这很好,但是当我尝试使用 "SELECT json -> '$.*' FROM table"
获取它时,它保持相同的顺序。
输出:('[1, 6, 3, 1]',)
我试过一些时髦的东西,比如:
"SELECT json -> '$.*' FROM table ORDER BY CAST(json -> '$.*' AS UNSIGNED) ASC"
但是输出还是一样
我希望能够得到类似这样的输出:
["870013663581437952":6, "903739315782320168":3, "574161434674462720":1, "913739315950071829":1]
或类似的东西。
如果要对 JSON 数组中的值进行排序,则必须将数组解析为单个元素,然后根据需要的顺序重建它。
SELECT JSON_ARRAYAGG(jsontable.value) OVER (ORDER BY jsontable.value) sorted
FROM test
CROSS JOIN JSON_TABLE(test.jsondata -> '$.*',
'$[*]' COLUMNS (value INT PATH '$')) jsontable
ORDER BY sorted DESC LIMIT 1
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=120495fc6f53829d83681d6f3ff574d4
我正在使用 JSON 类型将一些数据存储在 table 中,我在获取数据时遇到了一些排序问题。
示例数据:
{"574161434674462720":1,"870013663581437952":6,"903739315782320168":3,"913739315950071829":1}
此处的 json 在存储时按其键排序,这很好,但是当我尝试使用 "SELECT json -> '$.*' FROM table"
获取它时,它保持相同的顺序。
输出:('[1, 6, 3, 1]',)
我试过一些时髦的东西,比如:
"SELECT json -> '$.*' FROM table ORDER BY CAST(json -> '$.*' AS UNSIGNED) ASC"
但是输出还是一样
我希望能够得到类似这样的输出:
["870013663581437952":6, "903739315782320168":3, "574161434674462720":1, "913739315950071829":1]
或类似的东西。
如果要对 JSON 数组中的值进行排序,则必须将数组解析为单个元素,然后根据需要的顺序重建它。
SELECT JSON_ARRAYAGG(jsontable.value) OVER (ORDER BY jsontable.value) sorted
FROM test
CROSS JOIN JSON_TABLE(test.jsondata -> '$.*',
'$[*]' COLUMNS (value INT PATH '$')) jsontable
ORDER BY sorted DESC LIMIT 1
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=120495fc6f53829d83681d6f3ff574d4