首页 > 数据库 > SQL > 正文

SQL分组统计怎么做_完整逻辑拆解助力系统化掌握【技巧】

舞夢輝影
发布: 2025-12-17 22:12:07
原创
249人浏览过
SQL分组统计需严格遵循四步逻辑:先用WHERE筛选原始行(仅支持原始字段),再用GROUP BY划分数据组(非聚合列须全部列出),接着用HAVING筛选组结果(可使用聚合函数),最后用聚合函数与ORDER BY汇总排序。

sql分组统计怎么做_完整逻辑拆解助力系统化掌握【技巧】

SQL分组统计不是“写个GROUP BY就完事”,而是一套有严格执行顺序、明确语义边界和常见陷阱的逻辑体系。掌握它,关键在理清“谁先筛、谁归组、谁后筛、谁来汇总”这四步关系。

分组前:用WHERE筛选原始行

WHERE是第一道过滤关,作用于分组之前,只能使用原始字段,不能用AVG、COUNT这类聚合函数

  • 比如查“2024年入职的员工”,写 WHERE hire_date >= '2024-01-01'
  • 如果误写成 WHERE AVG(sal) > 5000,直接报错——因为此时还没分组,更没算出平均值
  • 它决定“哪些人能进组”,不参与后续分组计算

分组中:用GROUP BY划定数据块

GROUP BY按指定列值把行聚合成一个个逻辑组,每组对应SELECT中一个结果行。

  • 分组列必须出现在SELECT列表中(除非被聚合函数包裹)
  • 多字段分组如 GROUP BY deptno, job,表示先按部门再按职位细分
  • NULL值会被单独归为一组(不是被忽略),如需合并处理可用 COALESCE(deptno, 0)
  • SELECT里所有非聚合列,都得在GROUP BY中完整列出,否则语法报错

分组后:用HAVING筛选组结果

HAVING是第二道过滤关,作用于分组完成、聚合计算之后,可安全使用AVG、COUNT等函数。

腾讯AI 开放平台
腾讯AI 开放平台

腾讯AI开放平台

腾讯AI 开放平台 381
查看详情 腾讯AI 开放平台
  • 比如“只显示平均工资超3000的职位”,写 HAVING AVG(sal) > 3000
  • 它判断的是“哪个组该留下”,不是哪个人——所以条件里出现的聚合值,天然代表整个组的特征
  • HAVING必须紧跟GROUP BY之后,不能放在WHERE前面或ORDER BY后面

汇总与呈现:聚合函数+ORDER BY收尾

聚合函数(COUNT、SUM、AVG、MAX、MIN)是分组统计的“计算引擎”,配合ORDER BY让结果更易读。

  • COUNT(*)统计组内行数;COUNT(sal)只统计sal非NULL的行数
  • AVG、SUM、MAX、MIN自动忽略NULL,无需额外处理
  • 排序建议用别名,如 ORDER BY total_amount DESC,比重复写SUM(amount)更清晰安全
  • 若需补全无数据的组(如某部门没人),要用LEFT JOIN+GROUP BY,而非单纯靠HAVING

基本上就这些。逻辑链清晰了,写起来不绕,调起来不懵,查起来不漏。

以上就是SQL分组统计怎么做_完整逻辑拆解助力系统化掌握【技巧】的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

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

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

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