メインコンテンツまでスキップ

CUME_DIST

説明

CUME_DIST(Cumulative Distribution)は、ソート済み結果セット内での現在行値の相対ランキングを計算するウィンドウ関数です。結果セット内での現在行の累積分布値を返し、範囲は0から1です。指定された行について、その累積分布値は次と等しくなります:(現在行値以下の行数)/(ウィンドウパーティション内の総行数)。

構文

CUME_DIST()

戻り値

0から1の範囲のDOUBLE値を返します。

salesというテーブルがあり、営業担当者名(sales_person)、売上金額(sales_amount)、売上日(sales_date)を含む売上データが格納されているとします。各売上日における各営業担当者の売上金額の累積パーセンテージを計算したいと思います。

SELECT 
sales_person,
sales_date,
sales_amount,
CUME_DIST() OVER (PARTITION BY sales_date ORDER BY sales_amount ASC) AS cumulative_sales_percentage
FROM
sales;

sales テーブルに以下のデータが含まれているとします:

+------+--------------+------------+--------------+
| id | sales_person | sales_date | sales_amount |
+------+--------------+------------+--------------+
| 1 | Alice | 2024-02-01 | 2000 |
| 2 | Bob | 2024-02-01 | 1500 |
| 3 | Alice | 2024-02-02 | 1800 |
| 4 | Bob | 2024-02-02 | 1200 |
| 5 | Alice | 2024-02-03 | 2200 |
| 6 | Bob | 2024-02-03 | 1900 |
| 7 | Tom | 2024-02-03 | 2000 |
| 8 | Jerry | 2024-02-03 | 2000 |
+------+--------------+------------+--------------+

上記のSQLクエリを実行した後、結果には各営業担当者の売上金額と各売上日における累積パーセンテージランキングが表示されます:

+--------------+------------+--------------+-----------------------------+
| sales_person | sales_date | sales_amount | cumulative_sales_percentage |
+--------------+------------+--------------+-----------------------------+
| Bob | 2024-02-01 | 1500 | 0.5 |
| Alice | 2024-02-01 | 2000 | 1 |
| Bob | 2024-02-02 | 1200 | 0.5 |
| Alice | 2024-02-02 | 1800 | 1 |
| Bob | 2024-02-03 | 1900 | 0.25 |
| Tom | 2024-02-03 | 2000 | 0.75 |
| Jerry | 2024-02-03 | 2000 | 0.75 |
| Alice | 2024-02-03 | 2200 | 1 |
+--------------+------------+--------------+-----------------------------+

この例では、CUME_DIST()関数が各販売日内で販売金額をソートし、その後その日付における各営業担当者の販売金額の累積パーセンテージを計算します。PARTITION BY sales_dateを使用したため、計算は各販売日に対して個別に実行され、営業担当者の販売金額は異なる日付に対して独立して計算されます。