面试官: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.mzph.cn/news/1153587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无需联网的AI手势识别系统:离线部署详细教程

无需联网的AI手势识别系统&#xff1a;离线部署详细教程 1. 引言 1.1 AI 手势识别与追踪 在人机交互日益智能化的今天&#xff0c;非接触式控制正成为下一代用户界面的重要方向。从智能汽车到AR/VR设备&#xff0c;从智能家居到工业控制&#xff0c;手势识别技术正在悄然改变…

智能家居手势控制:毫米波雷达vsAI视觉对比

智能家居手势控制&#xff1a;毫米波雷达vsAI视觉对比 引言&#xff1a;手势控制的未来 想象一下&#xff0c;当你双手沾满面粉在厨房做饭时&#xff0c;只需挥挥手就能调节灯光亮度&#xff1b;或者躺在沙发上&#xff0c;一个简单的手势就能切换电视频道。这就是智能家居手…

ComfyUI插件全预装:Z-Image云端环境开箱即用

ComfyUI插件全预装&#xff1a;Z-Image云端环境开箱即用 引言 作为一名AI图像生成领域的研究者&#xff0c;你是否经常遇到这样的困扰&#xff1a;想要测试Z-Image模型与各种ControlNet插件的配合效果&#xff0c;却在本地安装过程中不断遭遇插件冲突、环境配置错误等问题&am…

【动态形状推理实现核心技术】:揭秘AI模型自适应输入的底层原理与实践路径

第一章&#xff1a;动态形状推理实现在深度学习模型部署中&#xff0c;输入数据的形状往往不是固定的。动态形状推理允许模型在运行时处理不同尺寸的输入&#xff0c;例如可变长度的文本序列或不同分辨率的图像。这一能力对于提升模型通用性和部署灵活性至关重要。动态形状的基…

从零开始使用AI人脸隐私卫士:本地离线人脸打码教程

从零开始使用AI人脸隐私卫士&#xff1a;本地离线人脸打码教程 1. 引言 1.1 学习目标 在数字化时代&#xff0c;图像和视频中的人脸信息极易被滥用&#xff0c;尤其是在社交媒体、监控系统或公开资料发布场景中。如何在不依赖云端服务的前提下&#xff0c;快速、安全地对敏感…

linux的fd传递实现

fd从一个进程传到另一个进程涉及到socket通信&#xff0c;具体来说是通过UNIX domain socket的辅助数据&#xff08;ancillary data&#xff09;机制实现的。这是一种在进程间传递文件描述符的标准方法。 1. fd传递的核心原理 在Linux中&#xff0c;文件描述符只在单个进程内有…

MediaPipe Hands实战:手部追踪系统搭建详细步骤

MediaPipe Hands实战&#xff1a;手部追踪系统搭建详细步骤 1. 引言 1.1 AI 手势识别与追踪 随着人机交互技术的不断发展&#xff0c;手势识别正逐渐成为智能设备、虚拟现实、增强现实和智能家居等场景中的核心感知能力。相比传统的触控或语音输入&#xff0c;手势操作更加自…

Z-Image提示词宝典:配合云端GPU快速迭代,1小时出百图

Z-Image提示词宝典&#xff1a;配合云端GPU快速迭代&#xff0c;1小时出百图 1. 为什么需要云端GPU加速提示词测试 作为提示词工程师&#xff0c;最痛苦的莫过于灵感爆发时却被生成速度拖后腿。传统本地生成方式通常面临三个典型问题&#xff1a; 等待时间过长&#xff1a;生…

高性能异步编程新思路:用std::future打造可组合任务链

第一章&#xff1a;高性能异步编程新思路概述在现代软件系统中&#xff0c;异步编程已成为提升吞吐量与响应速度的核心手段。传统的回调模式虽能解决阻塞问题&#xff0c;但易导致“回调地狱”&#xff0c;降低代码可维护性。随着语言层面的支持增强&#xff0c;基于协程与Prom…

没显卡怎么做姿态估计?人体关键点检测云端方案2元起

没显卡怎么做姿态估计&#xff1f;人体关键点检测云端方案2元起 1. 为什么你需要云端姿态估计方案 最近抖音上各种AI体态分析视频火了&#xff0c;作为健身教练的你肯定也注意到了。这些工具能精准识别学员的关节角度、脊柱曲度甚至肌肉发力模式&#xff0c;简直是私教课的神…

APACHE FESOD vs 传统开发:效率对比实测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比测试项目&#xff0c;分别用传统方式和APACHE FESOD实现相同的企业审批流程系统。要求&#xff1a;1.设计相同的功能需求文档&#xff1b;2.记录两种方式的开发时间、…

开源AI手势识别模型发展:MediaPipe Hands实战指南

开源AI手势识别模型发展&#xff1a;MediaPipe Hands实战指南 1. 引言&#xff1a;人机交互的新范式——AI手势识别与追踪 在智能硬件、虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和人机交互&#xff08;HCI&#xff09;快速发展的今天&#x…

揭秘契约编程中的设计陷阱:3个常见错误及避坑指南

第一章&#xff1a;契约编程的核心概念与价值契约编程&#xff08;Design by Contract&#xff09;是一种软件设计方法论&#xff0c;强调在组件交互中明确定义责任与义务。它通过前置条件、后置条件和不变式来规范函数或方法的行为&#xff0c;提升代码的可维护性与可靠性。契…

9款AI论文工具隐藏技巧:知网维普查重一把过,无AIGC痕迹

90%的学生都不知道这个隐藏功能&#xff1a; 你以为AI写论文就是简单的“CtrlC&#xff0c; CtrlV”&#xff1f;大错特错&#xff01;导师和查重系统背后&#xff0c;藏着一套你从未了解的“潜规则”和“黑科技”。今天&#xff0c;我就要揭露那些能让你的论文在知网、维普面前…

DeepPose实战指南:5分钟部署骨骼检测,云端GPU按秒计费

DeepPose实战指南&#xff1a;5分钟部署骨骼检测&#xff0c;云端GPU按秒计费 引言&#xff1a;为什么选择DeepPose&#xff1f; 想象一下&#xff0c;你正在开发一个健身APP&#xff0c;需要自动识别用户的运动姿势是否正确。或者你是一个游戏开发者&#xff0c;想让虚拟角色…

AI手势识别支持中文文档吗?开发者友好性评测教程

AI手势识别支持中文文档吗&#xff1f;开发者友好性评测教程 1. 引言&#xff1a;AI手势识别与追踪的现实意义 随着人机交互技术的不断演进&#xff0c;AI手势识别正逐步从实验室走向消费级应用。无论是智能穿戴设备、AR/VR交互系统&#xff0c;还是远程会议控制和无障碍操作…

YOLO姿态估计保姆级教程:没GPU也能跑,学生党必备

YOLO姿态估计保姆级教程&#xff1a;没GPU也能跑&#xff0c;学生党必备 引言 研究生阶段最怕什么&#xff1f;导师突然布置任务要求复现最新论文&#xff0c;而实验室GPU资源排队要等两周&#xff0c;自己手头只有一台MacBook笔记本&#xff0c;组会汇报却近在眼前。这种场景…

2024北大中文核心期刊目录解析:学术发表必看指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个学术期刊查询系统&#xff0c;包含2024年北大中文核心期刊目录的完整数据。系统应支持按学科分类检索、期刊影响因子查询、投稿指南查看等功能。要求界面简洁&#xff0c;…

没8G显存怎么办?Z-Image云端方案轻松应对大图生成

没8G显存怎么办&#xff1f;Z-Image云端方案轻松应对大图生成 引言&#xff1a;游戏开发者的材质贴图困境 作为一名游戏开发者&#xff0c;你是否经常遇到这样的困扰&#xff1a;当需要生成4K高清材质贴图时&#xff0c;家用显卡的8G显存根本不够用&#xff0c;导致生成过程卡…

OpenCore Legacy Patcher显示修复与多屏输出解决方案大全

OpenCore Legacy Patcher显示修复与多屏输出解决方案大全 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧Mac升级新版macOS后&#xff0c;外接投影仪或多显示器时经常…