答案:SQL中聚合函数与CASE WHEN结合可实现条件统计,如用SUM配合CASE按状态求订单金额总和,COUNT配合CASE统计男女用户数,AVG计算高评分订单平均金额,并可通过GROUP BY按部门统计薪资超8000人数。
SQL 聚合函数和 CASE WHEN 结合使用,可以在聚合过程中实现条件判断,灵活地对数据进行分组统计。这种组合常用于根据不同条件计算不同的聚合结果,比如条件计数、条件求和、分类统计等。
条件求和(SUM + CASE WHEN)
当你想根据某个条件对特定行求和时,可以用 SUM 配合 CASE WHEN。
示例:统计订单中“已完成”和“已取消”的金额分别总和
SELECT SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_total, SUM(CASE WHEN status = 'cancelled' THEN amount ELSE 0 END) AS cancelled_total FROM orders;
说明:只有满足条件的记录才参与求和,不满足则加 0,不影响总和。
条件计数(COUNT + CASE WHEN)
COUNT 会忽略 NULL 值,因此在使用 CASE 返回 NULL 可以实现条件计数。
示例:统计不同性别的用户数量
SELECT COUNT(CASE WHEN gender = 'M' THEN 1 END) AS male_count, COUNT(CASE WHEN gender = 'F' THEN 1 END) AS female_count FROM users;
说明:当条件不满足时,CASE 返回 NULL,而 COUNT 不计入 NULL,从而实现精准计数。
条件平均值(AVG + CASE WHEN)
可以计算满足特定条件的数据的平均值。
示例:计算高评分(>=4)订单的平均金额
SELECT AVG(CASE WHEN rating >= 4 THEN amount END) AS avg_high_rated_amount FROM orders;
说明:不满足条件时返回 NULL,AVG 自动忽略这些值。
结合 GROUP BY 进行分组条件聚合
更常见的是与 GROUP BY 搭配,按类别做条件统计。
示例:按部门统计薪资是否超过 8000 的人数
SELECT department, COUNT(CASE WHEN salary > 8000 THEN 1 END) AS high_salary_count, COUNT(CASE WHEN salary <= 8000 THEN 1 END) AS low_salary_count FROM employees GROUP BY department;
说明:每个部门都会分别统计高薪和低薪员工数量。
基本上就这些。关键是理解:CASE WHEN 在聚合内部控制哪些值参与计算,配合聚合函数的特性(如忽略 NULL),就能实现灵活的条件统计。