row_number()
是 SQL 中的一个窗口函数,用于在结果集中为每一行分配一个唯一的连续整数。这个整数通常基于某个排序顺序递增。以下是一些使用 row_number()
函数的实例:
假设有一个名为 employees
的表,包含以下字段:employee_id
, first_name
, last_name
, salary
。我们想要根据 salary
字段降序排列员工,并为每个员工分配一个行号。
SELECT
employee_id,
first_name,
last_name,
salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM
employees;
在这个查询中,ROW_NUMBER()
函数会根据 ORDER BY salary DESC
子句中指定的排序顺序(即降序排列)为每个员工分配一个行号。
假设我们想要根据 department_id
和 salary
字段对员工进行排序,并为每个员工分配一个行号。
SELECT
employee_id,
first_name,
last_name,
department_id,
salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num
FROM
employees;
在这个查询中,PARTITION BY department_id
表示行号会在每个 department_id
分组内重新计数。ORDER BY salary DESC
则指定了在每个分组内的排序顺序。
你可以根据需要更改 ORDER BY
子句中的字段或表达式来改变行号的分配顺序。例如,如果你想要根据员工的入职日期进行排序并分配行号,可以这样做:
SELECT
employee_id,
first_name,
last_name,
hire_date,
ROW_NUMBER() OVER (ORDER BY hire_date) AS row_num
FROM
employees;
在这个查询中,行号会根据 hire_date
字段的值递增分配。