実際に結果セット全体を折りたたむことなく、行グループの集計やランキングを計算する必要がある場合に特に便利です。
このチュートリアルに参加して、OVER 句の使用を開始するために知っておくべきことをすべて学びましょう。
要件:
OVER 句の機能と動作について説明する前に、SQL の基本を理解していることを確認してください。また、知識をテストするために使用できるデータベースにアクセスできることも前提としています。
この例では、MySQL データベースとSakila サンプル データベースを使用します。十分な権限を持っていること、およびデータベース エンジンがウィンドウ機能をサポートしていることを確認してください。
構文:
前述したように、ほとんどの場合、主に OVER 句をウィンドウ関数と組み合わせて使用します。
したがって、句の構文は次のように表現できます。
<ウィンドウ関数>(式) OVER ([PARTITION BY パーティション式, ...]
[ORDER BY 並べ替え式 [ASC | DESC]、...]
[フレーム仕様]
)
指定された構文では、各コンポーネントを次のように分類できます。
-
– SUM()、AVG()、ROW_NUMBER()、RANK など、行の特定のウィンドウに適用するウィンドウ関数を指します。 - 式 – ウィンドウ関数が適用される列または式を指定します。
- PARTITION BY – これは、結果セットをパーティションに分割するオプションの句で、各パーティションは関数が適用される個別のユニットのようなものです。同じパーティション内の行は、指定された列の同じ値を共有します。
- ORDER BY – 各パーティション内の行が処理される順序を指定します。
- Frame_specation – これは、パーティション内の行のフレームを定義するオプションの句です。一般的なフレーム仕様には、ROWS BETWEEN
AND または RANGE BETWEEN AND が含まれます。
それはさておいて、それを使用する方法に関するいくつかの実際的な例を見てみましょう。
例:
sakila サンプル データベースを使用して句の使用方法を示してみましょう。各映画カテゴリの総収益を決定する必要がある例を考えてみましょう。
次の例に示すように、OVER 句と一連の結合ステートメントを指定して sum window 関数を使用できます。
選択するcategory.name AS category_name、
film.title AS film_title、
映画.レンタル料金、
SUM(payment.amount) OVER (PARTITION BY category.name) AS total_revenue
から
映画
参加する
フィルムカテゴリーがオン
フィルム.フィルム_id = フィルム_カテゴリー.フィルム_id
参加する
カテゴリON
フィルムカテゴリー.カテゴリーID = カテゴリ.カテゴリーID
参加する
インベントリON
フィルム.フィルム_id = 在庫.フィルム_id
参加する
レンタルON
在庫.在庫ID = レンタル.在庫ID
参加する
支払いオン
レンタル.レンタルID = 支払い.レンタルID
注文方法
種別名、
映画.タイトル;
指定されたクエリでは、映画のタイトルとレンタル料金を選択することから始め、合計 (payment.amount over Partition by category.name) 式を使用して、カテゴリ名による各カテゴリ パーティションの合計を決定します。
PARTITION BY 句を使用して、合計の計算が一意のカテゴリごとに再開されるようにする必要があります。
結果の出力は次のようになります。
ほら、ありますよ!
結論
この例では、SQL での OVER 句の操作の基本を検討しました。これは基本的な句ではないため、他の SQL 機能についての事前の知識が必要です。