🪟
SQL 窗口函数
ROW_NUMBER/RANK/LAG 等窗口函数速查。
本地处理 · 不上传
加载工具中…
相关:sql · 窗口函数 · 分析 · 排名
SQL 窗口函数列出 ROW_NUMBER、RANK、LAG、SUM OVER 等函数的用法。它们能在不折叠行的前提下做分组计算。
使用步骤
- 先确定要排名、取偏移值还是做累计
- 找到对应的窗口函数
- 写清 PARTITION BY 与 ORDER BY 两部分
- 需要时显式指定窗口帧,默认帧未必符合预期
使用场景
- 编写排名与分组统计查询
- 计算移动平均与累计值
- 对比相邻行的数据
- 查找各组的前 N 名
小贴士
- 窗口函数与 GROUP BY 的根本区别是它不折叠行——每一行都保留,同时附带一个基于窗口计算的值。
- ROW_NUMBER 是无并列的连续编号,RANK 遇到并列会跳号,DENSE_RANK 并列但不跳号。选错会让「取前三名」的结果不符预期。
- LAG 与 LEAD 取前后行的值,计算环比、同比与差值时比自连接简洁高效得多。
常见问题
和 GROUP BY 有什么区别?
GROUP BY 把多行折叠成一行,明细就没了;窗口函数保留每一行,同时给每行附上基于分组的计算结果。想同时看明细和汇总时,窗口函数是唯一简洁的方案。
RANK 和 DENSE_RANK 怎么选?
两人并列第一时,RANK 的下一名是第三,DENSE_RANK 是第二。取「前三名」如果用 RANK 且有并列,可能只拿到两个不同名次;用 ROW_NUMBER 则强制无并列,各有适用场景。
怎么取每组的前 N 条?
用 ROW_NUMBER() OVER (PARTITION BY 分组字段 ORDER BY 排序字段) 生成组内序号,再在外层查询中筛选序号小于等于 N。这是窗口函数最经典的用途之一。
SQL 窗口函数是免费的吗?
是。本站所有工具完全免费,无需注册登录、无广告干扰,打开即用。
使用SQL 窗口函数,我的数据安全吗?
安全。该工具在你的浏览器本地完成处理,输入内容不会上传到服务器,隐私更有保障。