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() 函式返回一個介於 0 到 1 之間的百分位排名數值。

對於特定行,PERCENT_RANK() 使用以下公式計算百分位排名:

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

在此公式中,rank 是行的排名。total_rows 是被評估的總行數。

根據此公式,PERCENT_RANK() 函式對於結果集中的第一行總是返回 0。

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() 函式來計算結果集中行的百分位排名。

資料庫 #

本教程是否有幫助?
© .