SQL窗口函数解决多维排名问题_组合排序实战

rank() 跳号并列后空位,dense_rank() 连续编号不跳号;row_number() 强制唯一序号;分组需 PARTITION BY,NULL 排序需 NULLS LAST,窗口函数不可用于 WHERE。rank() 和 dense_rank() 差在哪?一查排名就错多维排序时用 rank() 得到"1,1,3,3,5"这种跳号结果,但业务要的是"1,1,2,2,3"------这不是数据错了,是函数选错了。dense_rank() 才是连续编号的正确选择;rank() 会为并列项腾出后续位置,row_number() 则强行打乱序号(哪怕值相同)。常见错误现象:ORDER BY score DESC 后发现同一分数被分到不同名次;或导出报表时"第2名"直接消失。按部门分组内排名:必须写 PARTITION BY dept_id,漏掉就变成全表排了排序字段含 NULL:默认排最前,若要排最后得加 NULLS LAST(PostgreSQL/Oracle 支持,MySQL 8.0 不支持)多个排序条件:写成 ORDER BY salary DESC, hire_date ASC,别用逗号隔开两个 ORDER BYMySQL 8.0 窗口函数报错 "This function is not allowed in this context"不是语法错,是 MySQL 对窗口函数的使用位置极其敏感:不能出现在 WHERE、GROUP BY 或普通子查询里,只能在 SELECT 列表或 HAVING 中直接调用。典型翻车场景:想筛出"部门内薪资前3的员工",写了 WHERE dense_rank() OVER (...) ------ 直接报错。正确做法:套一层子查询或 CTE,先算排名,再在外层 WHERE 过滤CTE 写法更清晰:WITH ranked AS (SELECT *, dense_rank() OVER (PARTITION BY dept_id ORDER BY salary DESC) rnk FROM emp)MySQL 8.0 不支持 RANGE BETWEEN,别抄 PostgreSQL 文档里的高级帧定义多字段组合排序时 order by 的字段顺序影响最终排名窗口函数的 ORDER BY 不是"先按 A 排、再按 B 排"的简单叠加,而是构建一个复合排序键。A 字段相同时才比较 B,但只要 A 不同,B 完全不参与当前行的名次判定。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
菜鸟~noob2332 分钟前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
ShyanZh14 分钟前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
惊讶的猫1 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
天赐范式1 小时前
天赐范式第186天:让方差开始自洽——Bulmer效应的闭式验证
python·数字生命·天赐范式·动态运行时·遗传方差·bulmer效应
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
Seraphina362 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
Είναι η κοπέλα2 小时前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
ROSF68682 小时前
2026 仿石漆乳液供应商:市场布局与行业发展态势梳理
大数据·人工智能·python
青少儿编程课堂2 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
hhzz3 小时前
【YOLO 入门到精通 04】理解任务与模型家族:7 大 CV 任务与 YOLO26 选型指南
人工智能·python·深度学习·yolo·计算机视觉