You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据库层面查询全表 按device_id分组返回键值对象

解答

完全可以在数据库层面直接实现你要的返回结构,无需额外在应用层做组装,不同数据库的实现语法有差异,以下是主流关系型数据库的可直接运行的实现方式:

  • 内层查询先按device_id分组,把同设备下的记录聚合成包含id、text字段的对象数组
  • 外层查询把分组后的device_id作为键,对应的对象数组作为值,聚合成完整的键值对JSON对象

MySQL 5.7及以上版本实现

使用MySQL内置的JSON聚合函数即可,注意MySQL的JSON对象键默认是字符串类型,查询语句:

SELECT JSON_OBJECTAGG(device_id, msg_list) AS device_msg_map
FROM (
    SELECT
        device_id,
        JSON_ARRAYAGG(JSON_OBJECT('id', id, 'text', `text`)) AS msg_list
    FROM 替换为你的实际表名
    GROUP BY device_id
) AS grouped_msg;

查询返回的device_msg_map字段就是你需要的完整结构,直接序列化返回给前端即可使用。

PostgreSQL 实现

PostgreSQL支持数字类型作为JSON键,和你期望的格式完全一致,查询语句:

SELECT jsonb_object_agg(device_id, msg_list) AS device_msg_map
FROM (
    SELECT
        device_id,
        jsonb_agg(jsonb_build_object('id', id, 'text', text)) AS msg_list
    FROM 替换为你的实际表名
    GROUP BY device_id
) AS grouped_msg;

如果不需要二进制JSONB格式,把函数前缀的jsonb_替换为json_即可返回标准JSON格式结果。

补充说明

如果你的数据库版本过低不支持上述JSON聚合函数,还是建议走「查全量记录+应用层组装」的方案,兼容性更好,排错成本更低。

内容的提问来源于stack exchange,提问作者Mike K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:12:19