首页 > 数据库 > SQL > 正文

SQL 聚合函数如何结合条件聚合?

舞姬之光
发布: 2025-10-16 14:01:01
原创
944人浏览过
答案:SQL中通过CASE与聚合函数结合实现条件统计,如COUNT(CASE WHEN...)统计满足条件的行数,SUM(CASE WHEN...THEN值ELSE 0 END)对符合条件的数据求和,并可使用多条件CASE进行分类汇总,提升查询效率。

sql 聚合函数如何结合条件聚合?

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_count
FROM orders;
登录后复制

2. 结合 SUM 进行条件求和

若需对符合条件的数据求和,将 CASE 放入 SUM 函数中:

SUM(CASE WHEN 条件 THEN 值 ELSE 0 END) 是常见写法,确保不满足条件时加 0,避免遗漏。

聚好用AI
聚好用AI

可免费AI绘图、AI音乐、AI视频创作,聚集全球顶级AI,一站式创意平台

聚好用AI115
查看详情 聚好用AI
示例:按用户统计收入,区分新老客户:
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_revenue
FROM sales
GROUP BY user_id;
登录后复制

3. 多条件分类聚合

可以使用 CASE 的多分支形式(CASE WHEN ... THEN ... ELSE)进行分组统计。

比如:按成绩等级统计学生人数:

SELECT
    COUNT(CASE 
        WHEN score >= 90 THEN 1 
    END) AS A_grade,
    COUNT(CASE 
        WHEN score >= 80 AND score < 90 THEN 1 
    END) AS B_grade,
    COUNT(CASE 
        WHEN score >= 70 AND score < 80 THEN 1 
    END) AS C_grade,
    COUNT(CASE 
        WHEN score < 70 THEN 1 
    END) AS F_grade
FROM 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_salary
FROM employees
GROUP BY department;
登录后复制
注意:AVG 会自动忽略 NULL,所以不需要 ELSE 分支。

基本上就这些。通过在聚合函数中嵌套 CASE 表达式,能灵活实现各种条件统计,是 SQL 数据分析中的常用技巧。关键在于理解聚合函数如何处理 NULL 值,并合理设计 CASE 的返回值。

以上就是SQL 聚合函数如何结合条件聚合?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号