Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ウィンドウ関数 | トリガー、ウィンドウ関数、DCL
SQL最適化とクエリ機能

ウィンドウ関数

メニューを表示するにはスワイプしてください

ウィンドウ関数は、定義されたウィンドウまたはパーティション内で、現在の行に関連する複数の行にわたる計算を実行するSQL関数の一種です。
ウィンドウ関数は、クエリの結果セットを減らすことなく、特定の行の集合に対して計算や分析を行うために使用されます。これは、通常クエリの返す行数を減らす集約関数とは異なります。

解説

次の Sales テーブルを例に説明します。

12
SELECT * FROM sales

各製品ごとの総売上を計算し、その値を追加の列としてメインテーブル内に表示したい場合、結果は次のようになります。

しかし、どのように実現するのでしょうか?
GROUP BY を使用するのはこのタスクには適していません。この句は指定した条件で行をグループ化することで行数を減らし、IDとその合計値のみが返されます。

このため、ウィンドウ関数はこの問題に対処するために不可欠です。

実装

次のクエリを使用して、必要な結果を取得できます。

1234567
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
クエリの説明
expand arrow
  • 関数名: 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():ウィンドウで定義された行の集合に対して計算を行う集約関数(例:SUMAVGCOUNT
  • OVER:ウィンドウ関数を導入するキーワード
  • PARTITION BY:指定した列の値に基づいて結果セットをパーティションに分割。ウィンドウ関数は各パーティションごとに個別に動作
    • partition_column:結果セットをパーティション分割するために使用される列
  • ORDER BY:各パーティション内の行の順序を指定
    • order_column:各パーティション内で行を並べ替えるために使用される列
  • FROM:データを取得する元のテーブルを示すキーワード
    • table_name:データを選択するテーブル名
question mark

ウィンドウ関数のパーティション分割を定義するために使用される句はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  2
some-alt