前言

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

方法一 :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;

结果:
image.png

方法二: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;

结果:
image.png
当然也可以和 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。