SQL Server 2019中按单列分组实现Count高级统计的问题
SQL Server 2019 统计number列数量的正确写法
你当前的SQL语句问题在于把number也加入了分组条件,这会导致每一组都是id+name+number的唯一组合,count(number)的结果其实是该组合的出现次数(通常是1,除非有完全重复的行),所以才会出现ID和name列不符合预期的显示效果。
根据你的需求,分三种常见场景给出解决办法:
场景1:统计每个id+name对应的number总条数(包含重复number)
如果需要统计每个id和name下所有number的总行数,只需要按id和name分组即可:
SELECT id, name, COUNT(number) AS number_total_count FROM table_demo GROUP BY id, name
如果允许number为NULL,COUNT(number)会忽略NULL值;若要统计所有行(包括NULL),可以改用COUNT(*)。
场景2:统计每个id+name下不同number的个数
如果需要统计每个id和name下不重复的number的数量,使用COUNT(DISTINCT number):
SELECT id, name, COUNT(DISTINCT number) AS distinct_number_count FROM table_demo GROUP BY id, name
场景3:统计每个number值的出现次数,同时保留对应的id和name
如果你的需求是每个number值单独一行,显示它的出现次数,且对应的id和name是该number关联的唯一值(假设同一个number只对应一组id+name),可以保留number在分组中:
SELECT id, name, number, COUNT(*) AS number_occurrence FROM table_demo GROUP BY id, name, number
这种写法会把所有id、name、number完全相同的行合并,统计出现次数。
内容的提问来源于stack exchange,提问作者Danh Tran Quoc
相关产品推荐
相关产品推荐

