SQL Server:如何实现按自定义年龄段分组统计count(*)结果
SQL Server 自定义年龄段用户数统计实现方案
核心实现逻辑
使用CASE表达式自定义年龄分组规则,再按分组结果聚合计数即可完成需求。
基础实现代码(仅展示有用户的分组)
SELECT [Age group] = CASE WHEN Age < 18 THEN '<18' WHEN Age BETWEEN 19 AND 34 THEN '19-34' WHEN Age BETWEEN 35 AND 75 THEN '35-75' WHEN Age > 75 THEN '>75' ELSE '年龄未知' -- 可选,处理Age为NULL的异常情况 END, [Count] = COUNT(1) FROM Users GROUP BY CASE WHEN Age < 18 THEN '<18' WHEN Age BETWEEN 19 AND 34 THEN '19-34' WHEN Age BETWEEN 35 AND 75 THEN '35-75' WHEN Age > 75 THEN '>75' ELSE '年龄未知' END
进阶实现代码(展示所有预设分组,含用户数为0的分组)
如果需要即使分组下没有用户,也在结果中显示计数为0,可以先构造全部分组再左关联用户表:
SELECT group_list.[Age group], [Count] = COUNT(Users.Age) FROM ( -- 预设所有需要展示的年龄段 VALUES ('<18'), ('19-34'), ('35-75'), ('>75'), ('年龄未知') ) AS group_list([Age group]) LEFT JOIN Users ON group_list.[Age group] = CASE WHEN Users.Age < 18 THEN '<18' WHEN Users.Age BETWEEN 19 AND 34 THEN '19-34' WHEN Users.Age BETWEEN 35 AND 75 THEN '35-75' WHEN Users.Age > 75 THEN '>75' ELSE '年龄未知' END GROUP BY group_list.[Age group]
说明
你可以根据实际业务需求调整CASE表达式中的区间边界,或者增减分组规则即可适配不同的统计要求。
内容的提问来源于stack exchange,提问作者Keras-JOB
相关产品推荐
相关产品推荐

