零基础学SQL 03:ORDER BY / GROUP BY / HAVING——查询收尾三件套,别再写错顺序
先说点真话当年做数据分析项目有回老板要按部门算平均工资只保留平均超过 9100 的部门。新人交上来的 SQL 八成报错——要么把筛平均工资的判断写成了WHERE AVG(工资) 9100直接语法报错要么WHERE和GROUP BY顺序乱写。其实就差一件事没搞懂排序、分组、分组后过滤这三块各自在哪个阶段生效。今天把它们一次讲透你以后再写这类报表就不慌了。 「SQL 从入门到精通」系列持续更新中关注我不迷路每篇都是实战干货。一、ORDER BY查完之后给结果排个序你会什么场景下用到它你SELECT把数据查出来了但想按工资从高到低看谁排前面、谁垫底或者按入职日期从早到晚看资历。这时候就要在查询最后加ORDER BY。正确写法SELECT姓名,工资FROM员工表ORDERBY工资DESC;-- DESC 从高到低ASC 从低到高默认结果按工资降序姓名工资王五9200赵六9200张三9000李四9000几个要点可以多列排序ORDER BY 部门 ASC, 工资 DESC先按部门同部门内再按工资。ORDER BY永远写在查询最后在WHERE、GROUP BY、HAVING之后。我当年踩的坑想按算出来的平均工资排序写成ORDER BY 平均但SELECT里给列起了别名有的数据库认别名、有的不认最稳的是直接写ORDER BY AVG(工资)。二、GROUP BY按维度归类汇总必须搭配聚合函数你会什么场景下用到它你想按部门统计人数、算平均工资而不是一行行看。这种先分组、再对每组算一个数的需求GROUP BY就是干这个的。但这里有个前提GROUP BY自己不会算数它必须配合聚合函数——COUNT()计数、SUM()求和、AVG()平均、MAX()最大、MIN()最小。正确写法SELECT部门,AVG(工资)AS平均工资,COUNT(*)AS人数FROM员工表GROUPBY部门;结果部门平均工资人数技术部9000.002销售部9200.002最大的坑新手必踩SELECT里出现的非聚合列必须同时出现在GROUP BY后面否则直接报错。比如下面这种就会报错-- ❌ 错误姓名没进 GROUP BY数据库不知道每个部门的姓名该显示哪一行SELECT部门,姓名,AVG(工资)FROM员工表GROUPBY部门;记住口诀分组查什么维度SELECT和GROUP BY就列什么维度其余一律包进聚合函数。三、HAVING分组之后再过滤和 WHERE 不是一回事你会什么场景下用到它接上面的例子你按部门算完平均工资了但只想看平均超过 9100 的部门。这个平均9100是分组之后才产生的数不能用WHERE去筛——因为WHERE是在分组之前过滤原始行的它根本不知道平均工资是什么。正确写法SELECT部门,AVG(工资)AS平均工资FROM员工表GROUPBY部门HAVINGAVG(工资)9100;-- 分组之后再筛分组结果结果只有销售部 9200 达标部门平均工资销售部9200.00四、WHERE vs HAVING一图分清重点这是新手最容易混的一对记住这个类比就通了WHERE像进考场前查身份证——在分组/汇总之前过滤原始行不能用聚合函数。HAVING像考完试按分数筛人——在分组/汇总之后过滤分组结果能用聚合函数。对比项WHEREHAVING生效阶段分组前分组后能不能用 AVG()/SUM() 等❌ 不能✅ 能典型用途过滤某行如工资8000过滤某组如平均9100错误示范别这么写-- ❌ 报错WHERE 里不能用聚合函数SELECT部门,AVG(工资)FROM员工表WHEREAVG(工资)9100GROUPBY部门;-- ✅ 正确筛分组结果用 HAVINGSELECT部门,AVG(工资)FROM员工表GROUPBY部门HAVINGAVG(工资)9100;两者还能一起用比如只看技术部且技术部平均9100——WHERE 部门技术部分组前先砍掉其他部门HAVING AVG(工资)9100分组后再筛。五、当年我踩过的 3 个坑重点看把 HAVING 的条件写成 WHERE想筛平均9100 的部门手滑写成WHERE AVG(工资)9100直接报语法错。结论对分组后算出来的值做判断一律用 HAVING。SELECT 里的非聚合列没进 GROUP BY写了SELECT 部门, 姓名, COUNT(*)却只GROUP BY 部门数据库不知道姓名取哪行报错。结论分组维度要前后一致。ORDER BY 放错位置写在GROUP BY前面报列无效。结论逻辑执行顺序永远是FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。注意这是引擎心里跑的顺序不是你写代码的顺序。你写 SQL 时把SELECT放第一句只是语法规定方便人读引擎其实最后才执行它——SELECT这一步干的是投影等前面的行和组都定了才决定每一行输出哪些列、算哪些表达式、起什么别名。也正因为SELECT在WHERE之后你不能在WHERE里用SELECT里起的别名比如WHERE 年薪10万而年薪是SELECT里算的会报错这正好证明WHERE比SELECT先跑。六、3 个练习自己跑一遍基于下面的员工表按工资从低到高排查出所有人的姓名和工资。按部门统计每个部门的最高工资。用订单表按员工id分组查出订单金额合计超过 5000的员工及其合计金额。SQLGROUP BY 员工idHAVING SUM(订单金额) 5000。思考题如果还想在结果里显示员工姓名要不要 JOIN员工表为什么只查订单表也够用参考答案先自己写再对照-- 1SELECT姓名,工资FROM员工表ORDERBY工资ASC;-- 2SELECT部门,MAX(工资)AS最高工资FROM员工表GROUPBY部门;-- 3只用到订单表即可员工id 与 订单金额 都在订单表里无需 JOIN若想显示姓名才需再 JOIN 员工表SELECTo.员工id,SUM(o.订单金额)AS合计FROM订单表 oGROUPBYo.员工idHAVINGSUM(o.订单金额)5000;七、小结ORDER BY查完排序写在最后多列用逗号。GROUP BY按维度汇总必须配合聚合函数SELECT非聚合列要进GROUP BY。WHERE管分组前HAVING管分组后对平均值/总和做判断用HAVING。执行顺序FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。下一篇我们讲条件过滤进阶AND / OR / IN / BETWEEN / LIKE把WHERE里的组合拳打全。互动时间站队投票你写 GROUP BY 时最容易忘的是哪块我当年铁定选把 HAVING 的条件写成 WHERE然后对着报错发呆半小时。是 HAVING 的位置、还是 SELECT 非聚合列要进 GROUP BY、还是 ORDER BY 顺序评论区打 1/2/3我挑典型的下篇专门讲。 我是 Hello_world12131十年数据分析经验。这篇有用的话点个赞 收藏顺便关注我 系列目录置顶 相关推荐篇02 SELECT/FROM/WHERE ·SQL 常用函数速查表 ·SQL 多表关联查询入门 ⏭️ 下篇预告篇04 条件过滤 AND/OR/IN/BETWEEN/LIKE SQL 系列统一练习表复制即可运行可重复执行不会报表已存在本系列所有文章都基于下面这 4 张固定表。每张表先DROP再CREATE所以每读一篇文重新跑一次这个块都安全不用从新建表。DROPTABLEIFEXISTS员工表;CREATETABLE员工表(员工idINTPRIMARYKEY,姓名VARCHAR(20),部门VARCHAR(20),工资DECIMAL(10,2),邮箱VARCHAR(50),手机VARCHAR(20),入职日期DATE);INSERTINTO员工表(员工id,姓名,部门,工资,邮箱,手机,入职日期)VALUES(1,张三,技术部,9000.00,zhangsandemo.com,13800000001,2019-03-01),(2,李四,技术部,9000.00,lisidemo.com,13800000002,2020-07-15),(3,王五,销售部,9200.00,wangwudemo.com,13800000003,2018-01-10),(4,赵六,销售部,9200.00,zhaoliudemo.com,13800000004,2021-05-20);DROPTABLEIFEXISTS订单表;CREATETABLE订单表(订单idINTPRIMARYKEY,员工idINT,订单金额DECIMAL(10,2),下单时间DATETIME,付款时间DATETIME,状态VARCHAR(20));INSERTINTO订单表(订单id,员工id,订单金额,下单时间,付款时间,状态)VALUES(101,1,3000.00,2026-01-10 10:00:00,2026-01-10 10:05:00,已付款),(102,1,2500.00,2026-02-15 14:00:00,2026-02-15 14:10:00,已付款),(103,3,4000.00,2026-03-20 09:30:00,2026-03-20 09:40:00,已付款),(104,2,1500.00,2026-04-05 16:00:00,NULL,待付款);DROPTABLEIFEXISTS用户表;CREATETABLE用户表(用户idINTPRIMARYKEY,姓名VARCHAR(20),手机VARCHAR(20),邮箱VARCHAR(50),地址VARCHAR(100));INSERTINTO用户表(用户id,姓名,手机,邮箱,地址)VALUES(1,张三,13900000001,zhangsandemo.com,北京市朝阳区),(2,李四,13900000002,lisidemo.com,上海市浦东新区),(3,王五,13900000003,wangwudemo.com,广州市天河区);DROPTABLEIFEXISTS任务表;CREATETABLE任务表(任务idINTPRIMARYKEY,员工idINT,备注VARCHAR(100),状态VARCHAR(20));INSERTINTO任务表(任务id,员工id,备注,状态)VALUES(1,1,完成需求评审,已完成),(2,2,NULL,进行中),(3,3,修复线上bug,已完成),(4,4,NULL,待分配);

相关新闻

35期 Windows原版系统镜像下载工具,版本集中选择与校验更省心

35期 Windows原版系统镜像下载工具,版本集中选择与校验更省心

镜像来源 重装 Windows 系统时,最怕的就是镜像来源不清楚,或者下载到不够纯净的系统文件。真到了需要重装的那一刻,来回找版本、分辨镜像信息,过程比安装本身还让人费劲。 老王看到一款 Windows 原版系统下载工具,思路…

2026/8/11 7:45:43 阅读更多 →
备孕期间辅酶Q10和维生素E能一起吃吗?高仕星辅酶Q10搭配建议

备孕期间辅酶Q10和维生素E能一起吃吗?高仕星辅酶Q10搭配建议

备孕期间辅酶Q10和维生素E能一起吃吗?高仕星辅酶Q10搭配建议 备孕期间,不少人会同时补充多种营养素。辅酶Q10、维生素E、叶酸、复合维生素……各种瓶瓶罐罐摆在一起,难免会冒出一个疑问:这些东西能一起吃吗?会不会互相…

2026/8/11 7:45:42 阅读更多 →
UE5角色面部动画:Anim Curves驱动BlendShape全流程解析

UE5角色面部动画:Anim Curves驱动BlendShape全流程解析

1. 项目概述:从概念到实现的桥梁最近在做一个独立游戏的角色面部动画,目标是让角色能做出像《苏珊的微笑》那样细腻、富有感染力的表情。直接手K每一帧动画?那工作量简直不敢想。在UE5里,我发现了一套高效且强大的工作流&#xff…

2026/8/11 7:44:42 阅读更多 →

最新新闻

C++贪吃蛇实战:从控制台到图形界面的游戏开发入门指南

C++贪吃蛇实战:从控制台到图形界面的游戏开发入门指南

1. 项目概述:为什么选择C小游戏作为入门实践? 很多刚学完C基础语法的新手朋友,都会面临一个共同的困惑:书本上的例题都懂了,但感觉离“做出一个东西”还很遥远。指针、类、继承这些概念,单独看都明白&#…

2026/8/11 8:31:00 阅读更多 →
基于VC++6.0与OpenCV1.0的摄像机标定工具:原理、实现与工程实践

基于VC++6.0与OpenCV1.0的摄像机标定工具:原理、实现与工程实践

1. 项目概述与核心价值 最近在整理一些老项目的代码,翻出来一个十几年前用VC 6.0和OpenCV 1.0做的摄像机标定工具。现在看这个技术栈,估计很多年轻点的开发者会觉得有点“古董”了。但恰恰是这种“老古董”项目,最能体现计算机视觉领域一些基…

2026/8/11 8:31:00 阅读更多 →
贵州企业如何低成本实现AI搜索获客?GEO优化解决方案深度解析

贵州企业如何低成本实现AI搜索获客?GEO优化解决方案深度解析

你是否遇到过这样的场景:明明产品过硬,服务到位,但客户用豆包、Kimi、通义千问这类AI工具提问时,出现的总是竞争对手的名字,而你的企业仿佛隐形了一样?这不是个例。博昇AI在贵州一线调研中发现,…

2026/8/11 8:31:00 阅读更多 →
博克CAD实战:男衬衫领子参数化制版全流程解析

博克CAD实战:男衬衫领子参数化制版全流程解析

这次我们来看一个服装制版领域的专业工具——博克CAD。如果你从事服装设计、打版工作,或者对服装结构感兴趣,这个软件可能是你提升效率和精度的关键。它不是AI模型,而是一款专业的计算机辅助设计软件,尤其在男衬衫领子这类复杂结构…

2026/8/11 8:31:00 阅读更多 →
动态外开过渡训练:解决舞蹈姿态切换中的控制难题

动态外开过渡训练:解决舞蹈姿态切换中的控制难题

你有没有过这样的体验:在舞蹈课上,老师喊“外开”,你努力把脚转开,感觉还不错;下一秒老师要求回到平行脚位,再迅速切换回外开,身体却突然不听使唤,重心摇晃,核心松散&…

2026/8/11 8:31:00 阅读更多 →
【物业管理软件如何让投诉分级处理从“一刀切“变成“精准施策“】

【物业管理软件如何让投诉分级处理从“一刀切“变成“精准施策“】

物业管理软件如何让投诉分级处理从"一刀切"变成"精准施策"很多物业公司处理投诉的方式是"来一个处理一个"——不管业主投诉的是电梯困人还是绿化修剪,都是前台登记、口头派单、等处理完再说。结果是什么?紧急的事情没人优…

2026/8/11 8:29:59 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →