Menu
CoddyTech

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 子句可以包含排序和分区指令,用于控制编号方式。

challenge icon

挑战

简单

可用的表和列:

  • liquids:id,density

获取密度大于 5.677 的所有液体。

为结果编号(使用 ROW_NUMBER() 函数),并将这一列命名为 row_num

亲手试试

-- 使用窗口函数为筛选结果的每一行编号
SELECT id, density, ____ as row_num
FROM liquids
WHERE density > ____
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器