ROW_NUMBER 函数
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 57 课,共 72 课。
窗口函数会在一组与当前行相关的表行上执行计算。与常规聚合函数不同,窗口函数不会将结果合并为单行。
在以下情况下,它们尤其有用:
- 计算累计总数
- 对组内的项目进行排名
- 将当前行与前一行或后一行进行比较
- 分析一段时间内的趋势
例如,以下是窗口函数用例的一些实际示例:
- 销售分析
- 计算截至每年的累计销售额(1995 年、1997 年、1999 年)
- 找出每个季度销量最高的产品
- 体育统计
- 跟踪不同年份的奥运会奖牌数
- 找出各个比赛周期(2000、2004、2008 年)的领先运动员
ROW_NUMBER() 是最简单的窗口函数之一。它会为结果集中的每一行分配一个唯一的连续编号。下面介绍如何使用它:
SELECT column1, column2,
ROW_NUMBER() OVER ([PARTITION BY column] [ORDER BY column]) as row_num
FROM table_name;必须将 OVER 子句与 ROW_NUMBER() 一起使用:ROW_NUMBER() OVER ()
例如:
SELECT product_name, sale_date,
ROW_NUMBER() OVER () as row_num
FROM sales;这会添加一个 row_num 列,计数范围从 1 到总行数。
注意:OVER 子句可以包含排序和分区指令,用于控制编号方式。
挑战
简单可用的表和列:
liquids:id,density
获取密度大于 5.677 的所有液体。
为结果编号(使用 ROW_NUMBER() 函数),并将这一列命名为 row_num
亲手试试
-- 使用窗口函数为筛选结果的每一行编号
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
11窗口函数第 1 部分
ROW_NUMBER 函数ORDER BY 排序依据PARTITION BY 分区依据PARTITION 与 ORDERLEAD 与 LAG 函数回顾:LEAD 与 LAG回顾:图片回顾:方框自己练习: SQL 在线编辑器