如何按Complex ID统计CONNECT和DISCO数量?SQL统计错误求助
解决方法
你的SQL问题出在窗口函数没有针对NATURE_OF_CHANGE_CD的类型做区分统计,而且重复使用了别名C1,以下是两种正确的实现方式:
方法一:条件聚合(GROUP BY)
适合只需要按分组统计次数的场景,直接对符合条件的记录计数:
SELECT COMPLEX_ID, PAYROLL_DATE, STRATEGIC_PRODUCT, SUM(CASE WHEN NATURE_OF_CHANGE_CD = 'CONNECT' THEN 1 ELSE 0 END) AS CONNECT_COUNT, SUM(CASE WHEN NATURE_OF_CHANGE_CD = 'DISCO' THEN 1 ELSE 0 END) AS DISCO_COUNT FROM 你的表名 A GROUP BY COMPLEX_ID, PAYROLL_DATE, STRATEGIC_PRODUCT
方法二:窗口函数(保留每条记录)
如果需要保留原始表的每条记录,同时显示对应COMPLEX_ID的统计次数,用带条件的窗口COUNT:
SELECT A.COMPLEX_ID, A.PAYROLL_DATE, A.STRATEGIC_PRODUCT, COUNT(CASE WHEN A.NATURE_OF_CHANGE_CD = 'CONNECT' THEN 1 END) OVER (PARTITION BY A.COMPLEX_ID) AS CONNECT_COUNT, COUNT(CASE WHEN A.NATURE_OF_CHANGE_CD = 'DISCO' THEN 1 END) OVER (PARTITION BY A.COMPLEX_ID) AS DISCO_COUNT FROM 你的表名 A
原SQL的问题说明
- 窗口函数
COUNT(A.COMPLEX_ID) OVER (PARTITION BY COMPLEX_ID)统计的是该COMPLEX_ID下的所有记录总数,没有区分CONNECT/DISCO类型,所以结果错误。 - 两个统计列都用了
C1作为别名,属于重复别名,会导致语法错误或结果混乱。 - 无意义的
DISTINCT会干扰统计逻辑,统计应该基于原始数据,不需要提前去重。
内容的提问来源于stack exchange,提问作者coldwaves
相关产品推荐
相关产品推荐

