在 SQL 查询中,COUNT(CASE WHEN ... THEN ... END)
是一种常见的用法,用于统计满足特定条件的记录数。具体例子:
# sexType = '2'表示女生
COUNT(CASE WHEN h_employee.sexType = '2' THEN 1 END) AS 女员工人数
解释
CASE WHEN ... THEN ... END
:- 这是一个条件表达式,用于根据条件返回不同的值。
- 当
h_employee.sexType = '2'
为真时,返回1
;否则返回NULL
。
COUNT()
:COUNT()
函数用于统计非NULL
值的数量。- 由于
CASE WHEN
在条件不满足时返回NULL
,因此COUNT()
只会统计满足条件的记录数。
AS 女员工人数
:- 这是为计算结果指定一个别名,方便在查询结果中引用。
作用
这段代码的作用是统计 h_employee
表中 sexType
为 '2'
的记录数,即统计女性员工的数量。
示例
假设 h_employee
表的结构和数据如下:
employee_id | name | sexType |
---|---|---|
1 | Alice | 2 |
2 | Bob | 1 |
3 | Carol | 2 |
4 | David | 1 |
5 | Eve | 2 |
执行以下查询:
SELECT
COUNT(CASE WHEN h_employee.sexType = '2' THEN 1 END) AS 女员工人数
FROM
h_employee;
结果:
女员工人数 |
---|
3 |
注意事项
CASE WHEN
的返回值:- 如果
CASE WHEN
的条件不满足,返回NULL
,COUNT()
会忽略NULL
值。 - 因此,只有
sexType = '2'
的记录会被统计。
- 如果
COUNT(1)
和COUNT(*)
的区别:COUNT(1)
和COUNT(*)
都会统计所有行,但COUNT(CASE WHEN ... THEN 1 END)
只统计满足条件的行。
性能:
- 这种写法在统计特定条件的记录数时非常高效,因为它只需要扫描一次表。
其他写法
你也可以使用 SUM()
实现相同的功能:
SUM(CASE WHEN h_employee.sexType = '2' THEN 1 ELSE 0 END) AS 女员工人数
这种写法的逻辑是:
- 当
sexType = '2'
时,返回1
,否则返回0
。 SUM()
会将这些值相加,得到满足条件的记录数。
总结
COUNT(CASE WHEN ... THEN 1 END)
是一种灵活且高效的方式,用于统计满足特定条件的记录数。- 在你的例子中,它用于统计
h_employee
表中女性员工的数量。 - 也可以使用
SUM(CASE WHEN ... THEN 1 ELSE 0 END)
实现相同的功能。