当前位置: 首页 > news >正文

面试官: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。
收藏+点赞,下次面试不迷路!
----

http://www.jsqmd.com/news/238531/

相关文章:

  • 无需联网的AI手势识别系统:离线部署详细教程
  • ComfyUI插件全预装:Z-Image云端环境开箱即用
  • 智能家居手势控制:毫米波雷达vsAI视觉对比
  • 【动态形状推理实现核心技术】:揭秘AI模型自适应输入的底层原理与实践路径
  • 从零开始使用AI人脸隐私卫士:本地离线人脸打码教程
  • linux的fd传递实现
  • MediaPipe Hands实战:手部追踪系统搭建详细步骤
  • Z-Image提示词宝典:配合云端GPU快速迭代,1小时出百图
  • 高性能异步编程新思路:用std::future打造可组合任务链
  • 没显卡怎么做姿态估计?人体关键点检测云端方案2元起
  • 5分钟快速验证:你的项目受废弃API影响有多大
  • 开源AI手势识别模型发展:MediaPipe Hands实战指南
  • 揭秘契约编程中的设计陷阱:3个常见错误及避坑指南
  • APACHE FESOD vs 传统开发:效率对比实测
  • 9款AI论文工具隐藏技巧:知网维普查重一把过,无AIGC痕迹
  • DeepPose实战指南:5分钟部署骨骼检测,云端GPU按秒计费
  • YOLO姿态估计保姆级教程:没GPU也能跑,学生党必备
  • AI手势识别支持中文文档吗?开发者友好性评测教程
  • 1小时搭建个人DLL文件托管服务
  • MusicBee歌词插件配置指南:三步实现完美歌词同步
  • 2024北大中文核心期刊目录解析:学术发表必看指南
  • 对话式AI团队赢得社交机器人技术大赛
  • 没8G显存怎么办?Z-Image云端方案轻松应对大图生成
  • OpenCore Legacy Patcher显示修复与多屏输出解决方案大全
  • 手势交互系统优化:MediaPipe Hands性能测试
  • AI生图新选择:Z-Image云端体验比Stable Diffusion更省心
  • PMX转VRM完整实战指南:从模型导入到完美转换
  • Windows任务栏美化革命:TaskbarX让你的桌面焕然一新
  • CTF-NetA:网络安全竞赛的终极自动化助手
  • AI手势识别与追踪降本方案:纯CPU部署节省算力成本50%