row_number()
是 SQL 中的一個窗口函數(shù),用于在結(jié)果集中為每一行分配一個唯一的連續(xù)整數(shù)。這個整數(shù)通常基于某個排序順序遞增。以下是一些使用 row_number()
函數(shù)的實例:
假設(shè)有一個名為 employees
的表,包含以下字段:employee_id
, first_name
, last_name
, salary
。我們想要根據(jù) salary
字段降序排列員工,并為每個員工分配一個行號。
SELECT
employee_id,
first_name,
last_name,
salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM
employees;
在這個查詢中,ROW_NUMBER()
函數(shù)會根據(jù) ORDER BY salary DESC
子句中指定的排序順序(即降序排列)為每個員工分配一個行號。
假設(shè)我們想要根據(jù) department_id
和 salary
字段對員工進(jìn)行排序,并為每個員工分配一個行號。
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
分組內(nèi)重新計數(shù)。ORDER BY salary DESC
則指定了在每個分組內(nèi)的排序順序。
你可以根據(jù)需要更改 ORDER BY
子句中的字段或表達(dá)式來改變行號的分配順序。例如,如果你想要根據(jù)員工的入職日期進(jìn)行排序并分配行號,可以這樣做:
SELECT
employee_id,
first_name,
last_name,
hire_date,
ROW_NUMBER() OVER (ORDER BY hire_date) AS row_num
FROM
employees;
在這個查詢中,行號會根據(jù) hire_date
字段的值遞增分配。