SQL CUME_DIST

概要:このチュートリアルでは、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 Tables

次のステートメントは、デモンストレーションのために、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)

出力は次のとおりです。

SQL CUME_DIST Function Example

この例では、部門は従業員数の昇順でソートされています。結果セットの行の合計は11です。

Administration 部門の従業員数は1人です。 Human ResourcesPublic RelationsAdministration と同じ従業員数です。結果として、従業員数が1人の部門が3つあります。 CUME_DIST() 関数は、次の式を使用して最初の行の累積分布値を計算します。

3 / 11 = 0.27
Code language: SQL (Structured Query Language) (sql)

同じロジックが2行目と3行目にも適用されます。

Marketing 部門の従業員数は2人です。関数は、従業員数が2人以下の他の部門を見つけます。結果は5です。したがって、Marketing 部門の CUME_DIST() は 5 / 11 = 0.45 です。

同じロジックが残りの行に適用されます。

このチュートリアルでは、SQL CUME_DIST() 関数を使用して、値の集合内の値の累積分布を計算する方法を学習しました。

このチュートリアルは役に立ちましたか?