Oracle中拼接同ID1的ID2值并统计ID1对应ID2组合的行数
解决方法
你只需在现有聚合查询逻辑基础上,补充对应聚合统计函数,同时补上原SQL缺失的GROUP BY ID1子句即可:
- 若要统计每个ID1分组下的总行数(含ID2重复的行),可以用
COUNT(*)实现:
SELECT ID1, LISTAGG(ID2, ', ') WITHIN GROUP (ORDER BY ID2) "ID2Values", COUNT(*) AS ID1RowCount FROM table_name GROUP BY ID1;
- 若要统计每个ID1分组下去重后的ID2数量(相同ID2只算一次),可以搭配
DISTINCT实现:
SELECT ID1, LISTAGG(DISTINCT ID2, ', ') WITHIN GROUP (ORDER BY ID2) "ID2Values", COUNT(DISTINCT ID2) AS DistinctID2Count FROM table_name GROUP BY ID1;
注:你最初提供的SQL缺少
GROUP BY ID1子句,在绝大多数支持LISTAGG语法的数据库(Oracle、PostgreSQL 11+、MySQL 8.0+等)中会直接报错,上述代码已经补充了该必要语法。
内容的提问来源于stack exchange,提问作者Osceria
相关产品推荐
相关产品推荐

