2024年4月19日发(作者:)
row_number() over怎么使用
ROW_NUMBER() OVER() 是 SQL 中的一个窗口函数,用于为
结果集中的每一行分配一个唯一的序号。这个序号是基于 OVER() 子
句中定义的排序规则来生成的。
下面是 ROW_NUMBER() OVER() 的基本语法:
sql复制代码
SELECT
column1, column2, ...,
ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
) AS row_number
FROM table_name;
•
PARTITION BY 是可选的,用于将结果集划分为多个分区,并
为每个分区的每一行分配一个序号。如果没有指定 PARTITION BY,
则整个结果集被视为一个单一的分区。
•
ORDER BY 是必需的,用于定义每个分区中行的排序方式。
示例
假设我们有一个名为 employees 的表,其中包含以下数据:
id
1
name
Alice
department
HR
id
2
3
4
5
name
Bob
Charlie
David
Eva
department
Engineering
HR
Engineering
HR
如果我们想为每个部门的员工分配一个序号,可以使用以下查询:
sql复制代码
SELECT
id, name, department,
ROW_NUMBER() OVER (
PARTITION BY department
ORDER BY name ASC
) AS row_number
FROM employees;
结果将是:
id
1
name
Alice
department
HR
row_number
1
id
3
5
2
4
name
Charlie
Eva
Bob
David
department
HR
HR
Engineering
Engineering
row_number
2
3
1
2
在这个例子中,我们使用了 PARTITION BY department,所以
每个部门的员工都被分配了独立的序号。序号是按照员工的名字(升
序)来分配的。
注意
•
ROW_NUMBER() 生成的序号是唯一的,并且不会因为数据的
更改而发生变化(除非数据被删除或插入)。
•
如果需要处理数据的变化,并且希望序号保持连续,可能需要
考虑使用其他窗口函数,如 DENSE_RANK() 或 RANK()。


发布评论