首页/数据/SQL 速查/ROW_NUMBER 组内行号
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

ROW_NUMBER 组内行号

为分区内的行按排序生成连续唯一编号(1,2,3…),用于分组取前 N 行、去重取最新等场景。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT o.id, o.user_id, o.created_at,
       ROW_NUMBER() OVER (PARTITION BY o.user_id
                          ORDER BY o.created_at DESC, o.id DESC) AS rn
FROM orders o;
编号每个分区从 1 开始,不重复不跳号
并列排序值相同的行按任意顺序编号(需加次级键保证确定)
典型用法rn=1 取最新;rn<=3 取前 3

易错点

  • 没有确定排序键时编号结果不稳定,跑两次可能不一样,补主键列
  • ROW_NUMBER 与 RANK 不同:排序值并列时 ROW_NUMBER 仍强行编号,取 Top N 会漏并列行

数据来源与参考

  • MySQL 8.0 Reference Manual · ROW_NUMBER
  • PostgreSQL Documentation · Window Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌