mysql json group,MYSQL JSON_MERGE和Group By

使用字符串函数组装所需的JSON,然后将其转换为JSON。

示例数据

create table data (json json, timestamp datetime);

insert into data values

('{"a": 1}', '2016-10-01 00:00:00'),

('{"b": 2}', '2016-10-01 00:00:00'),

('{"c": 3}', '2016-10-01 11:11:11'),

('{}', '2016-10-01 11:11:11'),

('{"c": 33}', '2016-10-01 11:11:11');查询以合并按时间戳分组的所有json值

select cast(

concat('{', -- wrap everything in root object '{ ... }'

group_concat(

-- strip parenthesis from individual item representation

-- '{"foo": 1}' -> '"foo": 1'

substring(json, 2, length(json) - 2)),

'}') as json) json,

timestamp

from data

-- skip empty JSON values to avoid getting extra comma during

-- group_concat

where json != JSON_OBJECT()

group by timestamp;查询结果

+------------------+---------------------+

| json | timestamp |

|------------------+---------------------|

| {"a": 1, "b": 2} | 2016-10-01 00:00:00 |

| {"c": 3} | 2016-10-01 11:11:11 |

+------------------+---------------------+几点需要注意:

此代码段的行为与JSON_MERGE()不同,例如:

当两个或多个属性的值相同时

覆盖而不是合并为值数组

它无法将对象与数组合并

所呈现的解决方案仅适用于作为顶级实体的对象

而不是数组。可以对其进行修改以使用数组。

如果依赖于JSON对象的字符串表示开头和

以大括号{}结尾。这可能会在未来版本中发生变化

服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值