首页 > 解决方案 > MYSQL JSON 按值排序

问题描述

我正在使用 JSON 类型将一些数据存储在表中,并且在获取数据时对所述数据进行排序时遇到了一些问题。

示例数据:

{"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]

或类似的规定。

标签: mysqljsonmysql-json

解决方案


如果要对 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


推荐阅读