首页 > 解决方案 > SQL Listagg 作为额外的列

问题描述

我正在寻找聚合列的 Oracle SQL 查询,但将聚合添加为额外的列,而不是“真正”聚合行。所以我想得到完全相同的行数,并带有一个带有聚合值的额外列。下面的示例应该有助于说明我的意思。

起始表:

ID    GIVEN_NAME   LAST_NAME
11    CARL         CLARKE
22    CARL         CLARKE
33    CARL         CLARKE
44    ANDREW       JOHNSON
55    ANDREW       JOHNSON

GIVEN_NAME 和 LAST_NAME 的常规 listagg(ID) 组会给我:

LISTAGG(ID)   GIVEN_NAME   LAST_NAME
112233        CARL         CLARKE
4455          ANDREW       JOHNSON

我想要的只是添加一个聚合列:

AGGREGATE   ID    GIVEN_NAME   LAST_NAME
112233      11    CARL         CLARKE
112233      22    CARL         CLARKE
112233      33    CARL         CLARKE
4455        44    ANDREW       JOHNSON
4455        55    ANDREW       JOHNSON

这甚至可能吗?谢谢!

标签: sqloraclelistagg

解决方案


以解析形式使用 LISTAGG 函数(OVER(解析子句)):

select GIVEN_NAME, LAST_NAME,
    LISTAGG(ID) WITHIN GROUP (ORDER BY ID) OVER (PARTITION BY department_id) as "AGGREGATE"
  from SOMETABLE

另请参阅LISTAGG 文档中的分析示例


推荐阅读