DB2中如何用ROW_NUMBER() OVER(PARTITION BY ... )统计Value=1的Distinct ID数量?
用ROW_NUMBER() OVER(PARTITION BY ...)统计DB2中Value=1的Distinct ID数量
可以用ROW_NUMBER() OVER(PARTITION BY ...)实现这个统计需求,但这属于间接实现方式——实际上有更简洁高效的写法,不过如果你必须用窗口函数的话,完全可行。
用ROW_NUMBER()的实现方式
思路是先给每个符合条件(Value=1)的ID标记唯一序号,只保留每个ID的第一条记录,最后统计这些记录的数量:
SELECT COUNT(*) AS distinct_id_count FROM ( SELECT ID, -- 按ID分区,给每个ID的记录分配从1开始的序号 ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS rn FROM your_table WHERE Value = 1 ) t -- 只保留每个ID的第一条记录,即唯一标识该ID的行 WHERE rn = 1;
子查询中,每个ID对应的所有Value=1的记录会被分配连续的序号,外层筛选rn=1的行后,COUNT(*)得到的就是唯一ID的总数。
更简洁的替代写法
如果没有特殊场景必须用窗口函数,直接用COUNT(DISTINCT ...)是更高效、直观的选择:
SELECT COUNT(DISTINCT ID) AS distinct_id_count FROM your_table WHERE Value = 1;
这条语句直接统计Value=1时的唯一ID数量,性能通常优于窗口函数的写法,建议优先使用。
内容的提问来源于stack exchange,提问作者SamR
相关产品推荐
相关产品推荐

