mysql - 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]
或类似的规定。
解决方案
如果要对 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
推荐阅读
- spring - 使用 2 个表 Spring Security 进行身份验证
- reactjs - 处理自定义 SWR 挂钩中的错误
- c# - 如何在 c# 中将字符串值从一种形式传递到另一种形式?
- flask - 如何创建与 flask_socketio 和 telebot 的聊天?
- python - Tensorflow 2D 矩阵乘法返回矩阵产品列表
- python - 我可以抓取网站以识别其下的标题和文本吗?
- c - 我应该缩写库中的变量和函数名称吗?
- typescript - `import type` 是否等同于 `import()`
- c# - 如何将编译器生成的代码转换为可编译的 C# 代码
- firebase - Flutter firebase 函数错误:响应不是有效的 JSON 对象