98世界杯主题曲_世界杯4强 - dajimy.com

摘要:在本教程中,您将学习如何使用 ROW_NUMBER() 为查询结果集中的每一行分配一个连续的序号。

SQL ROW_NUMBER() 函数简介 #ROW_NUMBER() 是一个窗口函数,它为结果集中的每一行分配一个连续的整数序号。

以下是 ROW_NUMBER() 函数的语法:

ROW_NUMBER() OVER (

[PARTITION BY expr1, expr2,...]

ORDER BY expr1 [ASC | DESC], expr2,...

)Code language: SQL (Structured Query Language) (sql)在此语法中,

PARTITION BY 子句将结果集划分为分区。PARTITION BY 子句是可选的。如果省略它,ROW_NUMBER 函数会将整个结果集视为单个分区。ORDER BY 子句对每个分区中的行进行排序。由于 ROW_NUMBER() 是一个对顺序敏感的函数,因此 ORDER BY 子句是强制性的。ROW_NUMBER() 函数为每个分区内的每一行分配一个连续的整数序号。当跨越分区边界时,它会重置行号。SQL ROW_NUMBER() 函数示例 #我们将使用示例数据库中的 employees 和 departments 表进行演示。

基本的 ROW_NUMBER() 函数示例 #以下语句检索所有员工的名字、姓氏和薪水,并使用 ROW_NUMBER() 函数为每一行添加连续的整数序号。

SELECT

ROW_NUMBER() OVER (

ORDER BY

salary

) row_num,

first_name,

last_name,

salary

FROM

employees;Code language: SQL (Structured Query Language) (sql)试一试

下图显示了部分结果集:

使用 SQL ROW_NUMBER() 函数进行分页 #ROW_NUMBER() 函数对于分页非常有用。

例如,如果您想在应用程序的表格中按页显示所有员工,每页有十条记录。

首先,使用 ROW_NUMBER() 函数为每一行分配一个连续的整数序号。其次,按请求的页面筛选行。第一页包括从 1 到 10 的行,第二页包括从 11 到 20 的行,依此类推。以下语句返回第二页的行:

SELECT

*

FROM

(

SELECT

ROW_NUMBER() OVER (

ORDER BY

salary

) row_num,

first_name,

last_name,

salary

FROM

employees

) t

WHERE

row_num > 10

AND row_num <= 20;Code language: SQL (Structured Query Language) (sql)试一试

下图显示了输出结果:

您可以使用公用表表达式 (CTE) 来代替子查询。

WITH

t AS (

SELECT

ROW_NUMBER() OVER (

ORDER BY

salary

) row_num,

first_name,

last_name,

salary

FROM

employees

)

SELECT

*

FROM

t

WHERE

row_num > 10

AND row_num <= 20;Code language: SQL (Structured Query Language) (sql)查找每个分组中的第 n 高值 #以下示例向您展示如何找出在各自部门中薪水最高的员工。

SELECT

department_name,

first_name,

last_name,

salary

FROM

(

SELECT

department_name,

ROW_NUMBER() OVER (

PARTITION BY department_name

ORDER BY salary DESC) row_num,

first_name,

last_name,

salary

FROM

employees e

INNER JOIN departments d

ON d.department_id = e.department_id

) t

WHERE

row_num = 1;Code language: SQL (Structured Query Language) (sql)试一试

在子查询中:

首先,PARTITION BY 子句按部门对员工进行分组。其次,ORDER BY 子句按薪水降序对每个部门的员工进行排序。第三,ROW_NUMBER() 为每一行分配一个连续的整数序号。当部门变更时,序号会重置。以下显示了子查询的结果集:

在外层查询中,我们只选择 row_num 值为 1 的员工行。

这是整个查询的输出结果:

如果您将 WHERE 子句中的谓词从 1 更改为 2、3 等,您将得到薪水第二高、第三高的员工,依此类推。

摘要 #使用 SQL ROW_NUMBER() 函数为同一分区内的每一行分配一个连续的整数序号。数据库 #PostgreSQL ROW_NUMBER 函数Oracle ROW_NUMBER 函数SQL Server ROW_NUMBER 函数MySQL ROW_NUMBER 函数SQLite ROW_NUMBER 函数本教程是否有帮助? 是 否 发送 取消