是否可以在LISTAGG中包含针对每个值的计数?
例如,当前结果使用
SELECT
CLIENT,
AIRLINE,
COUNT(DISTINCT CUSTOMER_ID) AS DISTINCT_CUSTOMER,
COUNT(ORDER_ID) AS NO_ORDERS,
LISTAGG(DISTINCT(FLIGHT), ', ')
WITHIN GROUP BY (ORDER BY FLIGHT) AS FLIGHT
GROUP BY CLIENT, AIRLINE
CLIENT AIRLINE DISTINCT_customers NO_ORDERS FLIGHT
ABC Qantas 18038 26000 QF123, QF456, QF789
字符串
预期成果
CLIENT AIRLINE DISTINCT_customers NO_ORDERS FLIGHT
ABC Qantas 18038 26000 QF123 (3), QF456 (10), QF789 (10)
型
3条答案
按热度按时间rxztt3cl1#
我会使用两个步骤:一个是获取数据 * 而不带 *
listagg
,然后在最后一步中将其应用于该结果。例如(基于Scott的
emp
表):字符串
前面的查询用作CTE(名为
temp
),listagg
包含job
沿着执行该工作的员工数量(这是count
返回的):型
应用于您的查询(种无效; miss the
from
clause),它会是这样的:型
wljmcqd82#
由于您希望获得每个客户端、航空公司和航班的计数,以及每个客户端和航空公司的不同客户,因此需要加入两个单独的聚合。
下面是一个逐步执行此操作的查询:
字符串
pkwftd7m3#
您可以对每个航班进行聚合,然后再次聚合:
字符串
DISTINCT
客户的计数,然后在外层查询中查找SUM
将是不正确的,因为您可以让同一客户使用同一客户和航空公司的不同航班,然后当您在外层查询中合计时,您将重复计算该客户。相反,您需要使用相关子查询或连接到另一个子查询,在其中找到不同的客户。