溫馨提示×

sql row_number()函數(shù)實例

sql
小樊
82
2024-10-19 15:22:02
欄目: 云計算

row_number() 是 SQL 中的一個窗口函數(shù),用于在結(jié)果集中為每一行分配一個唯一的連續(xù)整數(shù)。這個整數(shù)通常基于某個排序順序遞增。以下是一些使用 row_number() 函數(shù)的實例:

實例 1:基于某個字段的排序分配行號

假設(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 子句中指定的排序順序(即降序排列)為每個員工分配一個行號。

實例 2:在多個字段上分配行號

假設(shè)我們想要根據(jù) department_idsalary 字段對員工進(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)的排序順序。

實例 3:使用其他排序依據(jù)

你可以根據(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 字段的值遞增分配。

0