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

按ID/Section组合将多行数据合并为带JSON列的单行

数据库表嵌套JSON合并需求

现有如下结构的数据库表:

IDSectionCountryDate
11US1-1-11
12US1-1-11
13US1-1-11
11CA1-1-11
12CA1-1-11
13CA2-2-22
11MX2-2-22
12MX2-2-22
13MX2-2-22
21US3-3-33

需要通过SQL查询将其转换为以下格式:按ID/Section组合合并成单行,把对应国家与日期整合为嵌套JSON字符串:

ID/SectionCountry/dates
"1,1"{"US;CA":"1-1-11;","MX":"2-2-22;"}
"1,2"{"US;CA":"1-1-11;","MX":"2-2-22;"}
"1,3"{"US":"1-1-11;","CA;MX":"2-2-22;"}
"2,1"{"US":"3-3-33;"}

实现方案

MySQL 版本

通过两次分组聚合结合JSON函数实现:

  1. 子查询先按ID、Section、Date分组,将同一日期下的国家用分号拼接:
SELECT 
  ID,
  Section,
  Date,
  GROUP_CONCAT(Country SEPARATOR ';') AS country_group
FROM your_table
GROUP BY ID, Section, Date;
  1. 外层查询按ID、Section分组,用JSON_OBJECTAGG生成目标JSON结构:
SELECT 
  CONCAT('"', ID, ',', Section, '"') AS `ID/Section`,
  JSON_OBJECTAGG(country_group, CONCAT(Date, ';')) AS `Country/dates`
FROM (
  SELECT 
    ID,
    Section,
    Date,
    GROUP_CONCAT(Country SEPARATOR ';') AS country_group
  FROM your_table
  GROUP BY ID, Section, Date
) AS temp_result
GROUP BY ID, Section;

PostgreSQL 版本

使用string_agg拼接字符串,json_object_agg生成JSON:

SELECT 
  CONCAT('"', id, ',', section, '"') AS "ID/Section",
  json_object_agg(country_group, CONCAT(date, ';')) AS "Country/dates"
FROM (
  SELECT 
    id,
    section,
    date,
    string_agg(country, ';') AS country_group
  FROM your_table
  GROUP BY id, section, date
) AS temp_result
GROUP BY id, section;

注意:需将your_table替换为实际表名,不同数据库的JSON函数语法可能有细微差异,需根据使用的数据库调整。

内容的提问来源于stack exchange,提问作者Han Brolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:45:57