摘要:在本教程中,您將學習如何使用 SQL CUME_DIST() 函式計算行的累積分佈值。
SQL CUME_DIST() 函式簡介 #
CUME_DIST() 是一個視窗函式,用於計算一組值中某個值的累積分佈。
CUME_DIST() 函式返回一個值,該值表示小於或等於 (<=) 當前行值的行數除以總行數。
N / total_rowsCode language: SQL (Structured Query Language) (sql)在此公式中:
N是值小於或等於當前行值的行數。total_rows是正在評估的分割槽或結果集中的總行數。
CUME_DIST() 函式的返回值範圍大於 0 且小於或等於 1。
0 < CUME_DIST() <= 1Code language: SQL (Structured Query Language) (sql)重複的列值會獲得相同的 CUME_DIST() 值。
CUME_DIST() 函式的語法如下:
CUME_DIST() OVER (
PARTITION BY expr1, expr2 ...
ORDER BY expr1 [ASC | DESC], expr2...
)Code language: SQL (Structured Query Language) (sql)在此語法中:
- 首先,
PARTITION BY子句將結果集劃分為多個分割槽。如果省略PARTITION BY子句,函式會將整個結果集視為單個分割槽。 - 其次,
ORDER BY子句對每個分割槽內的行進行排序。 - 第三,
CUME_DIST()函式獨立應用於每個排序後的分割槽。
SQL CUME_DIST() 函式示例 #
請看示例資料庫中的以下 employees 和 departments 表:

以下語句基於 employees 和 departments 表建立一個名為 department_headcounts 的檢視,用於演示:
CREATE VIEW department_headcounts
AS
SELECT
department_name,
COUNT(employee_id) headcount
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id
GROUP BY
e.department_id;Code language: SQL (Structured Query Language) (sql)以下語句按各部門的員工人數查詢累積分佈值:
SELECT
department_name,
headcount,
ROUND(
CUME_DIST() OVER (
ORDER BY headcount
)
,2) cume_dist_val
FROM
department_headcounts;Code language: SQL (Structured Query Language) (sql)以下是輸出結果:

在此示例中,各部門按其員工人數升序排列。結果集中的總行數為 11。
Administration 部門有一名員工。Human Resources 和 Public Relations 部門的員工人數也與 Administration 部門相同。因此,有三個部門的員工人數為 1。CUME_DIST() 函式將使用以下公式計算第一行的累積分佈值:
3 / 11 = 0.27Code language: SQL (Structured Query Language) (sql)同樣的邏輯也適用於第二行和第三行。
Marketing 部門有兩名員工。函式將查詢員工人數小於或等於 2 的其他部門。結果是 5 個部門。因此,Marketing 部門的 CUME_DIST() 值為 5 / 11 = 0.45。
同樣的邏輯也適用於其餘的行。
在本教程中,您學習瞭如何使用 SQL CUME_DIST() 函式計算一組值中某個值的累積分佈。
資料庫 #
- PostgreSQL CUME_DIST 函式
- Oracle CUME_DIST 函式
- SQL Server CUME_DIST 函式
- MySQL CUME_DIST 函式
- SQLite CUME_DIST 函式
本教程是否有幫助?