COUNT(CASE WHEN ... THEN ... END)详解

发布于:2025-03-05 ⋅ 阅读:(14) ⋅ 点赞:(0)

在 SQL 查询中,COUNT(CASE WHEN ... THEN ... END) 是一种常见的用法,用于统计满足特定条件的记录数。具体例子:

# sexType = '2'表示女生
COUNT(CASE WHEN h_employee.sexType = '2' THEN 1 END) AS 女员工人数

解释

  1. CASE WHEN ... THEN ... END

    • 这是一个条件表达式,用于根据条件返回不同的值。
    • h_employee.sexType = '2' 为真时,返回 1;否则返回 NULL
  2. COUNT()

    • COUNT() 函数用于统计非 NULL 值的数量。
    • 由于 CASE WHEN 在条件不满足时返回 NULL,因此 COUNT() 只会统计满足条件的记录数。
  3. 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

注意事项

  1. CASE WHEN 的返回值

    • 如果 CASE WHEN 的条件不满足,返回 NULLCOUNT() 会忽略 NULL 值。
    • 因此,只有 sexType = '2' 的记录会被统计。
  2. COUNT(1)COUNT(*) 的区别

    • COUNT(1)COUNT(*) 都会统计所有行,但 COUNT(CASE WHEN ... THEN 1 END) 只统计满足条件的行。
  3. 性能

    • 这种写法在统计特定条件的记录数时非常高效,因为它只需要扫描一次表。

其他写法

你也可以使用 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) 实现相同的功能。

网站公告

今日签到

点亮在社区的每一天
去签到