明凯博客

关注网站技术,一个特立独行的程序员

数据库分段分类统计

分段分类统计,首先分类的话需要用case when 它的用法请大家去看看教程。
但是case when 只能统计单个数据。比如下面的例子。

有一个名为”信息表”中有”出生日期”的日期字段,按每10岁分段统计人数SQL如何写?
求年龄段 1-10 11-20 21-30 31- 40 41-50 51-60 61-70人数和?

用case when 的话。把sum放在 case when里面能够统计一个人在哪一个年龄阶段。
当第一个数据统计后就统计全部人数和了。
但是我要统计所有在这个年龄阶段的人数和。那么需要把sum放在case when的外面,统计每一种情况的总和:

1
2
3
4
5
6
7
8
9
SELECT  
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 1 AND 10 THEN 1 ELSE 0 END) AS '1-10',
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 11 AND 20 THEN 1 ELSE 0 END) AS '11-20', 
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS '21-30', 
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS '31-40', 
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS '41-50', 
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 51 AND 60 THEN 1 ELSE 0 END) AS '51-60', 
SUM(CASE WHEN datediff(YEAR, 出生日期, getdate()) BETWEEN 61 AND 70 THEN 1 ELSE 0 END) AS '61-70' 
FROM 信息表

这样就是我们需要的结果了。

, , , ,

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注