row_number()
是 SQL 中的一个窗口函数,用于在结果集中为每一行分配一个唯一的连续整数。这个整数通常基于某个排序顺序递增。以下是一些使用 row_number()
函数的实例:
实例 1:基于某个字段的排序分配行号
假设有一个名为 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
子句中指定的排序顺序(即降序排列)为每个员工分配一个行号。
实例 2:在多个字段上分配行号
假设我们想要根据 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
则指定了在每个分组内的排序顺序。
实例 3:使用其他排序依据
你可以根据需要更改 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
字段的值递增分配。