tags: [sql,统计总数]

categories: 学无止境

copyright_author_href: https://www.xiaohuihui.net

copyright_url: https://blog.csdn.net/Android_xue/article/details/102802475
copyright_author: SunnyRivers

cover:


前言

经常会遇到根据不同的条件统计总数的问题,一般有两种写法:count 和 sum 都可以
数据准备:

方法一 :Count

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
COUNT(
CASE
WHEN age > 20
AND age < 25 THEN
1
ELSE
NULL
END
) AS cnt0,
COUNT(
CASE
WHEN age >= 25
AND age < 30 THEN
1
ELSE
NULL
END
) AS cnt1
FROM
USER;

结果:

方法二:sum

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
SUM(
CASE
WHEN age > 20
AND age < 25 THEN
1
ELSE
0
END
) AS cnt0,
SUM(
CASE
WHEN age >= 25
AND age < 30 THEN
1
ELSE
0
END
) AS cnt1
FROM
USER;

结果:

当然也可以和 count 代码一样 ELSE 后面也写为 NULL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
SUM(
CASE
WHEN age > 20
AND age < 25 THEN
1
ELSE
NULL
END
) AS cnt0,
SUM(
CASE
WHEN age >= 25
AND age < 30 THEN
1
ELSE
NULL
END
) AS cnt1
FROM
USER;

后记

其实原理很简单,count 统计的时候有满足条件的就加 1,没有满足的变为 NULL,我们知道聚合函数统计的时候是忽略 null 值的;而 sum 原理和 coun 相似,不过 ELSE 后面可以是 0 或者 NULL。