摘要:在本教學中,您將學習如何使用 SQL CUME_DIST()
函數計算資料列的累積分佈值。
SQL CUME_DIST() 函數簡介
CUME_DIST()
是一個視窗函數,用於計算一組數值中值的累積分佈。
CUME_DIST()
函數會回傳一個值,表示數值小於或等於 (<=
) 目前資料列值的資料列數,除以總資料列數。
N / total_rows
Code language: SQL (Structured Query Language) (sql)
在此公式中
N
是數值小於或等於目前資料列值的資料列數。total_rows
是正在評估的分割區或結果集中的資料列數。
CUME_DIST()
函數的回傳值範圍介於大於 0 的低值和小於或等於 1 的高值之間。
0 < CUME_DIST() <= 1
Code 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.27
Code language: SQL (Structured Query Language) (sql)
相同的邏輯也適用於第二列和第三列。
Marketing
部門有兩個員工人數。函數會找出其他員工人數小於或等於 2 的部門。結果為 5。因此,Marketing
部門的 CUME_DIST()
為 5 / 11 = 0.45
相同的邏輯也適用於其餘的資料列。
在本教學中,您已學習如何使用 SQL CUME_DIST()
函數計算一組數值中值的累積分佈。