Oracle sql排名

在Oracle SQL中,可以使用多種方法來實現排名。以下是一些常用的方法:

  1. RANK函式:

    SELECT RANK() OVER (ORDER BY column_name) AS rank_column
    FROM table_name;

    這個函式會為每個分組內的行分配一個排名,如果有並列的行,它們會獲得相同的排名,後續的行會從該排名開始依次增加。

  2. DENSE_RANK函式:

    SELECT DENSE_RANK() OVER (ORDER BY column_name) AS dense_rank_column
    FROM table_name;

    這個函式與RANK函式類似,不同之處在於DENSE_RANK函式不會跳過排名,即如果有並列的行,它會給它們分配相同的排名,但後續的行會連續編號,不會跳過任何排名。

  3. NTILE函式:

    SELECT NTILE(n) OVER (ORDER BY column_name) AS ntile_column
    FROM table_name;

    這個函式將結果集分為n個部分(其中n是一個正整數),並為每個部分中的行分配一個tile編號,從1開始連續編號。

  4. ROW_NUMBER函式:

    SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS row_number_column
    FROM table_name;

    這個函式為每個行分配一個連續的編號,從1開始,不考慮是否有並列的行。

以上函式都可以通過在SELECT子句中使用OVER子句來實現視窗函式的效果。OVER子句可以指定一個分區(PARTITION BY),這樣排名就會在每個分區內部進行。

例如,如果你想要查看每個部門中員工的工資排名,你可以這樣做:

SELECT employee_id, department_id, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
FROM employees;

這個查詢會為每個部門的員工按照工資從高到低進行排名。