ウィンドウ関数を使用すると、ユーザーは結果セット(通常はテーブルまたは別のクエリの結果)のパーティション(つまり、サブグループまたはセクション)に対して計算を実行できます。クエリで定義されたグループごとに1つの値のみを返す従来の集計関数とは異なり、ウィンドウ関数は入力行ごとに1つの値を返します。
ウィンドウ関数は、より複雑なSQLの概念に代わるものを提供することにより、データセットのパーティション(ウィンドウ)を分析するクエリの効率を高め、複雑さを軽減します。派生クエリ。一般的な使用例は次のとおりです。
- 特定のウィンドウ内でのランキング結果(グループごとのランキングなど)
- 特定のウィンドウの別の行からデータにアクセスする(例:期間ごとのレポート)
- 特定のウィンドウ内の集計(例:現在の合計):
ウィンドウ関数は、OVER
で開始されます 条項であり、次の3つの概念を使用して構成されます。
- ウィンドウパーティション(
PARTITION BY
)-行をパーティションにグループ化します - ウィンドウの順序付け(
ORDER BY
)-各ウィンドウ内の行の順序または順序を定義します - ウィンドウフレーム(
ROWS
)-指定された行からのオフセットを使用してウィンドウを定義します
function (expression) OVER
( [ PARTITION BY expression_list ]
[ ORDER BY order_list ]
[ ROWS frame_clause ])
- expression_list:カンマで区切られた式のリスト、通常は列名
- order_list:カンマで区切られた式のリスト、通常は列名
- frame_clause:
CURRENT ROW
を使用してオフセットを定義します 、_value_ PRECEDING
、UNBOUNDED PRECEDING
、_value_ FOLLOWING
、UNBOUNDED FOLLOWING
ランキング:グループごとのランキング
SELECT
campaign
, month
, total_cost
, rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8
前の行:期間ごとの分析
SELECT
campaign
, month
, total_cost
, LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4
ウィンドウ内の集計:現在の合計
SELECT
campaign, month, monthly_cost
, sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month
ドキュメントと機能のリスト:
使用法と構文には、データベースごとに微妙な違いがあることに注意してください。実装に固有の情報については、以下に提供されているソース固有のドキュメントを使用してください。
- チュートリアル
- 機能
- チュートリアル
- 機能
- チュートリアル
SQLServer
- チュートリアル
BigQuery
- チュートリアル