答案:SQL中通过CASE与聚合函数结合实现条件统计,如COUNT(CASE WHEN…)统计满足条件的行数,SUM(CASE WHEN…THEN值ELSE 0 END)对符合条件的数据求和,并可使用多条件CASE进行分类汇总,提升查询效率。

SQL 聚合函数结合条件聚合,通常使用 CASE 表达式嵌套在聚合函数内部,实现对不同条件的数据分别统计。这种方式可以在一个查询中返回多个条件下的汇总结果,而无需多次查询或连接。
1. 使用 CASE 配合 COUNT 实现条件计数
当你想统计满足特定条件的行数时,可以在 COUNT 中使用 CASE:
COUNT(CASE WHEN 条件 THEN 1 END) 只会对满足条件的行计数,不满足的返回 NULL,而 COUNT 不统计 NULL 值。
例如:统计某个订单表中“已完成”和“已取消”的订单数量:
SELECT COUNT(CASE WHEN status = 'completed' THEN 1 END) AS completed_count, COUNT(CASE WHEN status = 'canceled' THEN 1 END) AS canceled_countFROM orders;
2. 结合 SUM 进行条件求和
若需对符合条件的数据求和,将 CASE 放入 SUM 函数中:
SUM(CASE WHEN 条件 THEN 值 ELSE 0 END) 是常见写法,确保不满足条件时加 0,避免遗漏。
示例:按用户统计收入,区分新老客户:
SELECT user_id, SUM(CASE WHEN is_new = 1 THEN amount ELSE 0 END) AS new_customer_revenue, SUM(CASE WHEN is_new = 0 THEN amount ELSE 0 END) AS existing_customer_revenueFROM salesGROUP BY user_id;
3. 多条件分类聚合
可以使用 CASE 的多分支形式(CASE WHEN … THEN … ELSE)进行分组统计。
比如:按成绩等级统计学生人数:
音疯
音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。
146 查看详情
SELECT COUNT(CASE WHEN score >= 90 THEN 1 END) AS A_grade, COUNT(CASE WHEN score >= 80 AND score = 70 AND score < 80 THEN 1 END) AS C_grade, COUNT(CASE WHEN score < 70 THEN 1 END) AS F_gradeFROM students;
4. 与 GROUP BY 结合实现分组条件聚合
在分组查询中,每个分组内独立执行条件聚合,非常实用。
例如:按部门统计男女性员工的平均工资:
SELECT department, AVG(CASE WHEN gender = 'M' THEN salary END) AS avg_male_salary, AVG(CASE WHEN gender = 'F' THEN salary END) AS avg_female_salaryFROM employeesGROUP BY department;
注意:AVG 会自动忽略 NULL,所以不需要 ELSE 分支。
基本上就这些。通过在聚合函数中嵌套 CASE 表达式,能灵活实现各种条件统计,是 SQL 数据分析中的常用技巧。关键在于理解聚合函数如何处理 NULL 值,并合理设计 CASE 的返回值。
以上就是SQL 聚合函数如何结合条件聚合?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1053058.html
微信扫一扫
支付宝扫一扫