SQL CUME_DIST 函式

摘要:在本教程中,您將學習如何使用 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() 函式示例 #

請看示例資料庫中的以下 employeesdepartments 表:

Employees & Departments Tables

以下語句基於 employeesdepartments建立一個名為 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)

以下是輸出結果:

SQL CUME_DIST Function Example

在此示例中,各部門按其員工人數升序排列。結果集中的總行數為 11。

Administration 部門有一名員工。Human ResourcesPublic 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() 函式計算一組值中某個值的累積分佈。

資料庫 #

本教程是否有幫助?
© .