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

如何使用LISTAGG实现多列按行关联聚合为指定单行格式?

问题描述

需要将多行数据中的三个关联列合并到单行中。当前使用以下SQL代码,分别对三个字段调用LISTAGG函数后拼接:

, '(' ||(LISTAGG(billing_item_id, ', ') WITHIN GROUP (order by eduid) || ' | ' ||  LISTAGG(billing_item_amount, ', ') WITHIN GROUP (order by eduid))  || ' | ' ||  LISTAGG(REGEXP_SUBSTR(instance_name,'^[A-Z]{3,4} [0-9]{4}'), ', ') WITHIN GROUP (order by eduid) || ')' as billing

得到的结果为:

321718277   Anon Person SENIOR HIGH SCHOOL  2022-2023   (606547, 606550 | 225, 225 | ENGL 1175, MATH 1153)

但期望的结果是将每行对应的billing_item_id、billing_item_amount、处理后的instance_name先组合为「ID|金额|课程」的单元,再聚合为如下格式:

321718277   Anon Person SENIOR HIGH SCHOOL  2022-2023   (606547|225|ENGL 1175),(606550|225|MATH 1153)

要求每行的三个关联字段对应组合后再进行聚合。

解决方案

核心思路是先组合每行的三个字段,再对组合后的单元进行聚合,而非分别聚合后再拼接。修改后的SQL代码如下:

, '(' || LISTAGG(
    billing_item_id || '|' || billing_item_amount || '|' || REGEXP_SUBSTR(instance_name,'^[A-Z]{3,4} [0-9]{4}')
    , '),('
) WITHIN GROUP (ORDER BY eduid) || ')' as billing

代码说明:

  1. 先将每行的三个字段拼接成ID|金额|课程格式的单元
  2. 用LISTAGG对这些单元进行聚合,指定分隔符为),(,按eduid排序
  3. 最后在首尾拼接(和),生成完全匹配期望格式的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:20