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

bookウィンドウ関数の種類

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

SQLで使用される主なウィンドウ関数の種類について簡単に説明します。

集約関数

これらはウィンドウコンテキストで使用される標準的な集約関数(AVGSUMMAXMINCOUNT)です。このタイプのウィンドウ関数は前の章ですでに使用しました。

順位付け関数

SQLの順位付け関数は、結果セットのパーティション内で各行に順位を割り当てることができるウィンドウ関数の一種です。これらの関数は、順序付けされた計算や分析を行う際に非常に有用です。

  • RANK(): ORDER BY句に基づいてパーティション内の各異なる行に一意の順位を割り当てます。同じ値の行は同じ順位を受け取り、順位に飛びが生じます;

  • DENSE_RANK(): RANK()と似ていますが、順位の連番に飛びがありません;

  • NTILE(n): 順序付けされたパーティション内の行をn個のグループに分割し、各行にグループ番号を割り当てます。

Amount関数を使用して、各ProductIDごとにDENSE_RANK()に基づいて売上を昇順で順位付けします。

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

結果テーブルには、メインテーブルのすべての情報と、特定の製品ごとの各売上の順位を示す追加の列が含まれます。

値比較関数

SQLの値比較ウィンドウ関数は、現在の行の値と同じパーティション内の他の行の値を比較するために使用されます。
これらの関数は、トレンド分析、隣接する行に基づく計算、または定義されたウィンドウ内の特定の行の値へのアクセスなどのタスクに特に有用です。 SQLにはいくつかの値比較関数があります:

  • LAG() : セルフジョインを使用せずに結果セット内の前の行の値を取得します;
  • LEAD(): セルフジョインを使用せずに結果セット内の次の行の値を取得します;
  • FIRST_VALUE(): ウィンドウフレーム内の最初の行の値を返します;
  • LAST_VALUE(): ウィンドウフレーム内の最後の行の値を返します。

LAG()値比較ウィンドウ関数を使用して、各製品ごとの前回の売上からの売上金額の変化を計算します。

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

その結果、サブクエリやストアドプロシージャを使用せずに、各製品ごとの売上差分情報を簡単に抽出可能。 また、次のクエリを使用することで、パーティション分割せずにすべての売上に対する差分も計算可能。

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

PARTITION BY ブロック内に OVER 句を含めていないことがわかります。これは、特定の製品ごとではなく、テーブル内のすべての売上に対して前の値を取得したいことを意味します。

question mark

SQL における NTILE() 関数の役割は何ですか?

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

すべて明確でしたか?

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

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

セクション 3.  3

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 3.  3
some-alt