ウィンドウ関数
メニューを表示するにはスワイプしてください
ウィンドウ関数は、定義されたウィンドウまたはパーティション内で、現在の行に関連する複数の行にわたる計算を実行するSQL関数の一種です。
ウィンドウ関数は、クエリの結果セットを減らすことなく、特定の行の集合に対して計算や分析を行うために使用されます。これは、通常クエリの返す行数を減らす集約関数とは異なります。
解説
次の Sales テーブルを例に説明します。
12SELECT * FROM sales
各製品ごとの総売上を計算し、その値を追加の列としてメインテーブル内に表示したい場合、結果は次のようになります。
しかし、どのように実現するのでしょうか?
GROUP BY を使用するのはこのタスクには適していません。この句は指定した条件で行をグループ化することで行数を減らし、IDとその合計値のみが返されます。
このため、ウィンドウ関数はこの問題に対処するために不可欠です。
実装
次のクエリを使用して、必要な結果を取得できます。
1234567SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
クエリの説明
- 関数名:
SUM - 説明: 指定した列の合計を定義されたウィンドウ内で計算します。
- 引数:
Amount: 合計を計算する列。
- ウィンドウ関数:
- OVER: 集計が実行されるウィンドウを指定します。
- PARTITION BY Product_ID:
Product_ID列の値に基づいて結果セットをパーティションに分割します。各パーティションごとに合計が計算されます。
- エイリアス:
Total_Revenue_Per_Product: 各パーティションごとに計算された合計に割り当てられる名前。 - 用途: この関数は、各商品IDごとの合計売上を計算するために使用されます。
- 結果: 結果セットには
Sales_IDテーブルのProduct_ID,Sales_Date,Amount,Total_Revenue_Per_Product,sales列が含まれ、Total_Revenue_Per_Productは各商品IDごとの合計売上を表します。 - 並び順: 結果セットは
Sales_Dateで並び替えられます。
ウィンドウ関数を作成する一般的な構文は、次のように表されます:
SELECT
aggregation_func() OVER (
PARTITION BY partition_column
ORDER BY order_column
)
FROM
table_name;
- SELECT:クエリの開始を示すキーワード
- aggregation_func():ウィンドウで定義された行の集合に対して計算を行う集約関数(例:
SUM、AVG、COUNT) - OVER:ウィンドウ関数を導入するキーワード
- PARTITION BY:指定した列の値に基づいて結果セットをパーティションに分割。ウィンドウ関数は各パーティションごとに個別に動作
- partition_column:結果セットをパーティション分割するために使用される列
- ORDER BY:各パーティション内の行の順序を指定
- order_column:各パーティション内で行を並べ替えるために使用される列
- FROM:データを取得する元のテーブルを示すキーワード
- table_name:データを選択するテーブル名
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 2
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 3. 章 2