在 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)实现相同的功能。

3686

被折叠的 条评论
为什么被折叠?



