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

如何用SQL的LISTAGG函数按名称聚合结果并修正分组错误?

问题排查与修正

你的SQL核心问题出在GROUP BY子句的分组字段错误:

  • 你把需要聚合的ic.category_name和ai.class_name也加入了分组条件,这会让数据库将每个不同的category/class组合单独分组,导致同一个name+account_id生成多行结果,完全违背了你合并行的需求。
  • 另外,GROUP BY里的a.name和序号1是重复的(1对应a.name AS merchant_name),属于冗余写法;而你左连接的metrics.account_targets表没有被查询使用,留着可能会因为一对多关联导致数据重复,干扰聚合结果。

修正后的SQL语句

SELECT
 a.name AS merchant_name
, a.account_id AS merchant_id
, listagg(ic.category_name, '; ') WITHIN GROUP (ORDER BY ic.category_name) AS category
, listagg(ai.class_name, '; ') WITHIN GROUP (ORDER BY ai.class_name) AS integration_name
FROM metrics.account_integrations ai
INNER JOIN metrics.accounts a ON ai.account_id = a.account_id
LEFT JOIN metrics.integration_categories ic ON ai.class_name = ic.integration_name
-- 移除未使用的表连接
GROUP BY 1, 2 -- 仅按需要合并的维度分组:name和account_id
ORDER BY a.name;

关键修改说明

  1. 精简分组条件:只保留a.name和a.account_id作为分组字段,确保同一个name+account_id的所有行被合并成一行。
  2. 移除冗余表连接:删掉未使用的metrics.account_targets连接,避免不必要的数据重复。
  3. 添加聚合排序:在LISTAGG中加入WITHIN GROUP (ORDER BY ...),让聚合后的列表按字段顺序排列,结果更规整(可选,但推荐)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49