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 字段的值递增分配。