零基础学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/10/18 0:37:47 阅读更多 →
备孕期间辅酶Q10和维生素E能一起吃吗?高仕星辅酶Q10搭配建议

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

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

2026/10/15 14:06:25 阅读更多 →
UE5角色面部动画:Anim Curves驱动BlendShape全流程解析

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

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

2026/10/18 18:21:15 阅读更多 →

最新新闻

PP-DocLayoutV3版面分析实战:从RAG乱序到结构化文档预处理

PP-DocLayoutV3版面分析实战:从RAG乱序到结构化文档预处理

前阵子在帮某技术团队做企业内部知识库的问答系统,天天和一批扫描版PDF打交道。系统整体跑通之后,检索质量一直上不去,答非所问的情况特别多。排查到最后,问题指向的不是向量模型,也不是检索策略,而是最基础…

2026/10/19 4:50:03 阅读更多 →
HDFS生产级深度解析:架构本质、配置陷阱与可观测运维

HDFS生产级深度解析:架构本质、配置陷阱与可观测运维

1. 项目概述:从“离线Day03”看HDFS在真实数据工程中的定位你打开一份名为“hadoop离线day03--Hadoop HDFS”的课程材料或笔记标题,第一反应可能是:“哦,又一节Hadoop基础课”。但如果你真在某公司数据平台组干过两年以上&#xf…

2026/10/19 4:50:02 阅读更多 →
AutoGen 10.1实战:多Agent对话协作框架全面拆解

AutoGen 10.1实战:多Agent对话协作框架全面拆解

“10.1”这个版本号一出来,熟悉的朋友应该知道我说的是哪个东西——AutoGen,微软开源的那个多智能体对话框架。在很多项目里,真正让它出圈的不是“能写代码”,而是它把多个AI Agent组织起来,让它们像人开会一样你一言我…

2026/10/19 4:50:02 阅读更多 →
open-code-review:面向生产环境的可审计代码审查CLI

open-code-review:面向生产环境的可审计代码审查CLI

1. 这不是又一个“AI写代码”玩具:open-code-review 的真实定位与不可替代性你可能已经点开过十几个标着“AI Code Review”的开源项目,下载、安装、跑 demo,然后发现——它要么在 PR 描述里胡乱夸你“逻辑清晰”,要么对着一行if …

2026/10/19 4:50:02 阅读更多 →
开源本地化代码审查工具 open-code-review 实战指南

开源本地化代码审查工具 open-code-review 实战指南

1. 这不是又一个“AI写代码”玩具,而是一套能嵌入真实开发流水线的开源代码审查工作流我第一次在团队内部试运行open-code-review的时候,没敢直接推到主分支,而是先拉了个feat/open-cr-test分支,把上周刚合并的三个 PR 全部回滚重…

2026/10/19 4:50:02 阅读更多 →
室内AI出图三周实战路线:从零基础到稳定交付效果图

室内AI出图三周实战路线:从零基础到稳定交付效果图

刚收到一位做室内设计的同行私信,开口就问:“室内AI出图要学多久?我看别人发的那种效果图太惊艳了,但自己连从哪下手都不知道。”我的回答很直接:三周,足够你从完全没碰过AI出图,到稳定输出客户…

2026/10/19 4:49:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →