mysql - MySQL Stored Proc 构建多维 JSON
问题描述
我有具有以下数据结构的表:
name | age | date | value
---------------------------------
John | 20 | 2020-01-01 | 5
Peter| 21 | 2020-01-02 | 6.5
John | 26 | 2019-02-26 | 1.8
John | 20 | 2029-10-13 | 0.7
Peter| 47 | 2020-01-18 | 11.3
Peter| 21 | 2020-02-01 | 41.7
John | 20 | 2020-01-22 | 4
我只想通过 Mysql 5.5.5 Stored Proc(没有 json 聚合函数)来获得这样的结果:
{
"John (20)" : {
["2020-01-01", 5],
["2029-10-13", 0.7],
["2029-10-13", 4]
},
"John (26)" : {
["2019-02-26", 1.8]
},
"Peter (21)" : {
["2020-01-02", 6.5],
["2020-02-01", 41.7],
},
"Peter (47)" : {
["2020-01-18", 11.3]
}
}
并且无法弄清楚如何制作它。只得到扁平的json....
select concat('[', group_concat(
'{"name":"',`name`,'",',
'"age":"',`age`,'",',
'"date":"',`date`,'",',
'"value":',`value`, '}' separator ','), ']') from `data`
解决方案
一种选择:
SELECT
CONCAT(
'{',
GROUP_CONCAT(
CONCAT(
`der`.`name_age`,
': {',
`der`.`date_value`,
'}'
)
SEPARATOR ', '),
'}'
) `json_result`
FROM (
SELECT
CONCAT(
'"',
`name`,
' (', `age`, ')"'
) `name_age`,
GROUP_CONCAT(
CONCAT(
'["',
`date`,
'", ',
`value`,
']'
)
SEPARATOR ', ') `date_value`
FROM
`data`
GROUP BY
`name`, `age`
) `der`;
请参阅dbfiddle。
推荐阅读
- algorithm - 并行化 A* 以进行昂贵的成本计算
- vba - 如何在 VBA 中使用 Http-request 设置 cookie?
- sql-server - Windows API 调用“RegGetValueW”返回错误代码:0
- python - 在 python 中绘制时间图
- windows - 有没有办法缩短 connect_ex() 的超时时间?
- javascript - 如何使用 Google API Node.js 客户端更新 Google Drive 上的现有文件?
- java - 如何更改我的代码以读取所有类型的分隔文件?它目前只读取 csv 文件,然后比较它们
- javascript - 你可以一起使用html模板标签和(ES)模板文字吗?
- google-apps-script - 如何确保 onEdit 函数不会误触发
- java - 如果方法采用原始类型,如何将字符串转换为 setter 函数?