news 2026/4/3 8:14:45

面试官:ROW_NUMBER() 和 GROUP BY 到底差在哪?5 分钟彻底秒杀!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试官:ROW_NUMBER() 和 GROUP BY 到底差在哪?5 分钟彻底秒杀!


【SQL 必知必会】一文吃透 ROW_NUMBER() OVER(PARTITION BY …) 与 GROUP BY 的本质区别


关键词:窗口函数、ROW_NUMBER、PARTITION BY、GROUP BY、SQL 优化、MySQL8、PostgreSQL、面试题
1. 前言
面试里高频出现的一道题:
“ROW_NUMBER() OVER (PARTITION BY no ORDER BY cIt DESC) 到底是哪个数据库的语法?和 GROUP BY 有什么区别?”
90% 的同学只能答出“分组排序”,却说不清“为啥不用 GROUP BY 也能分组”。

今天 5 分钟带你彻底搞懂!
2. 语法速览
ROW_NUMBER() OVER (
PARTITION BY 列1, 列2 -- 分组
ORDER BY 列3 [ASC|DESC] -- 组内排序
) AS 别名
• SQL 标准函数,MySQL8.0+、PostgreSQL、SQL Server、Oracle、SQLite3.25+ 全支持。
• 不是“某个数据库专用”! 别再被面试官套路。
3. 核心区别一张表
维度 GROUP BY ROW_NUMBER() OVER(PARTITION BY …)
是否聚合 ✅ 每组只返回 1 行 ❌ 不聚合,原行数不变
能否选原列 ❌ 只能 SELECT 聚合列/聚合函数 ✅ 任意列都能选
执行顺序 先 WHERE → 再 GROUP → 再 HAVING 先 FROM → 再 WINDOW → 再 WHERE(窗口函数在 WHERE 之后)
典型场景 统计每组总数、平均值 取每组 TopN、去重最新记录
4. 实战:取每个用户最新订单
表结构
orders(
id bigint,
user_id int,
amount decimal(10,2),
create_time datetime
);
需求:拿到每个用户最新一笔订单的完整字段。
用 GROUP BY 几乎写不出来(除非子查询嵌套),用窗口函数 1 行搞定:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY create_time DESC) AS rn
FROM orders
) t
WHERE rn = 1;
• 性能:给 (user_id, create_time) 建联合索引即可走覆盖索引,O(n) 级别。
• 扩展:想取“最新 3 笔”把 rn = 1 换成 rn <= 3 即可。
5. 常见坑
1. MySQL5.7 及以下不支持窗口函数,会报 ERROR 1064。
2. WHERE 里不能直接引用窗口列别名,需要在外层包一层子查询。
3. 与 GROUP BY 混用时要记住:窗口函数在 GROUP BY 之后执行,可以引用聚合结果。
SELECT user_id,
SUM(amount) AS total_amt,
ROW_NUMBER() OVER (ORDER BY SUM(amount) DESC) AS amt_rank
FROM orders
GROUP BY user_id;
4. 面试金句
“GROUP BY 是‘压缩’数据,窗口函数是‘透视’数据,二者根本不在一个维度工作。”
5. 结语
记住:
• 见到“每组 TopN、最新、去重” 先想窗口函数;
• 见到“每组统计、求和、求平均” 再用 GROUP BY。
收藏+点赞,下次面试不迷路!
----

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 21:47:23

【constexpr标准库扩展应用】:揭秘现代C++高效编程的底层利器

第一章&#xff1a;constexpr标准库扩展应用C11引入的constexpr关键字允许在编译期求值函数和对象构造&#xff0c;极大地增强了元编程能力。随着C14、C17及后续标准的发展&#xff0c;constexpr的支持范围不断扩展&#xff0c;现已可用于更广泛的库组件和算法中。编译期字符串…

作者头像 李华
网站建设 2026/4/1 4:21:41

没8G显存怎么办?Z-Image云端镜像解难题,1块钱起体验

没8G显存怎么办&#xff1f;Z-Image云端镜像解难题&#xff0c;1块钱起体验 引言&#xff1a;低配设备的AI绘图困境 很多编程爱好者和AI新手都遇到过这样的尴尬&#xff1a;想学习最新的Z-Image接口开发&#xff0c;却发现自己的老旧游戏本只有4G显存&#xff0c;而市面上大多…

作者头像 李华
网站建设 2026/4/1 22:54:36

VisionPro二开之算法模块

VisionPro二开之算法模块 一 UI设计二 加载图像/// <summary>/// 加载图像/// </summary>/// <param name"sender"></param>/// <param name"e"></param>private void materialButton8_Click(object sender, EventArg…

作者头像 李华
网站建设 2026/4/1 13:17:42

YOLOv8+OpenPose联用指南:云端双模型并行,成本降70%

YOLOv8OpenPose联用指南&#xff1a;云端双模型并行&#xff0c;成本降70% 引言&#xff1a;当检测遇到姿态分析 想象一下&#xff0c;你是一名安防监控工程师&#xff0c;需要同时完成两项关键任务&#xff1a;既要快速检测画面中是否有人&#xff08;YOLOv8的强项&#xff…

作者头像 李华
网站建设 2026/4/3 7:30:14

关键点检测数据标注教程:CVAT+预标定模型联用

关键点检测数据标注教程&#xff1a;CVAT预标定模型联用 引言 在计算机视觉领域&#xff0c;关键点检测&#xff08;Keypoint Detection&#xff09;是一项基础而重要的技术&#xff0c;它通过识别图像中特定点的位置来描述目标对象的姿态或形状。对于人体而言&#xff0c;这…

作者头像 李华
网站建设 2026/3/24 10:09:23

Z-Image-ComfyUI避坑指南:云端部署3大常见错误解决

Z-Image-ComfyUI避坑指南&#xff1a;云端部署3大常见错误解决 引言 作为一名AI图像生成领域的开发者&#xff0c;你可能已经听说过Z-Image这个强大的开源模型。它结合了ComfyUI的可视化工作流&#xff0c;能够生成高质量的图像内容。然而&#xff0c;在实际部署过程中&#…

作者头像 李华