SQL PERCENT_RANK

摘要:在本教學中,您將學習如何使用 SQL PERCENT_RANK() 函數來計算結果集中資料列的百分位數排名。

PERCENT_RANK() 是一個 視窗函數,用於計算結果集中資料列的百分位數排名。

PERCENT_RANK() 函數的語法如下:

PERCENT_RANK()  
    OVER ( 
        PARTITION BY expr1, expr2,...
        ORDER BY expr1 [ASC|DESC], expr2 ...
    )
Code language: SQL (Structured Query Language) (sql)

PERCENT_RANK() 函數返回一個介於零到一之間的百分位數排名數字。

對於特定的資料列,PERCENT_RANK() 使用以下公式來計算百分位數排名:

(rank - 1) / (total_rows - 1)
Code language: SQL (Structured Query Language) (sql)

在此公式中,rank 是資料列的排名。total_rows 是正在評估的資料列總數。

基於此公式,PERCENT_RANK() 函數始終為結果集中的第一列返回零。

PARTITION BY 子句將資料列劃分為不同的分割區,而 ORDER BY 子句指定每個分割區中資料列的邏輯順序。PERCENT_RANK() 函數會針對每個排序的分割區獨立計算。

PARTITION BY 子句是可選的。如果省略 PARTITION BY 子句,該函數會將整個結果集視為單個分割區。

SQL PERCENT_RANK() 函數範例

我們將使用來自範例資料庫employeesdepartments 資料表進行示範。

使用 SQL PERCENT_RANK() 於查詢結果集範例

以下查詢會找出員工按薪資計算的百分位數排名:

SELECT
    first_name,
    last_name,
    salary,
    ROUND(
        PERCENT_RANK() OVER (
            ORDER BY salary
        ) 
    ,2) percentile_rank
FROM
    employees;
Code language: SQL (Structured Query Language) (sql)

在此範例中,我們省略了 PARTITION BY 子句,因此該函數將結果集中的所有員工視為單個分割區。請注意,我們使用了 ROUND() 函數將百分位數排名四捨五入到小數點後兩位。

以下圖片顯示了輸出結果:

SQL PERCENT_RANK Function Over Result Set Example

ORDER BY 子句對員工的薪資進行排序,而 PERCENT_RANK() 函數則按照薪資升序計算員工的百分位數排名。

讓我們分析輸出結果中的一些資料列。

  • Karen 的薪資最低,不比任何人都高,因此她的百分位數排名為零。另一方面,Steven 的薪資最高,比任何人都高,因此他的百分位數排名為 1 或 100%。
  • Nancy 和 Shelley 的百分位數排名為 82%,這表示他們的薪資高於其他 82% 的員工。

使用 SQL PERCENT_RANK() 於分割區範例

以下語句返回每個部門員工按薪資計算的百分位數排名:

SELECT
    first_name,
    last_name,
    salary,
    department_name,
    ROUND(
        PERCENT_RANK() OVER (
            PARTITION BY e.department_id
            ORDER BY salary
        ) 
    ,2) percentile_rank
FROM 
    employees e
    INNER JOIN departments d 
        ON d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)

以下是輸出結果:

SQL PERCENT_RANK Function Over partition Example

在此範例中,我們按照部門名稱劃分員工。然後,PERCENT_RANK() 應用於每個分割區。

正如輸出結果中清楚顯示的,每當部門變更時,百分位數排名就會重置。

在本教學中,您學習了如何使用 SQL PERCENT_RANK() 函數來計算結果集中資料列的百分位數排名。

這個教學對您有幫助嗎?