コンテンツへスキップ
uencoder

SQL のウィンドウ関数を使う

ウィンドウ関数(OVER)は、グループ化せずに複数行にわたる計算を行います。ROW_NUMBER、RANK、LAG、LEAD、集約ウィンドウを学びましょう。

  1. 1

    ウィンドウ関数は、現在の行に関連する行の「ウィンドウ」に対して操作を行い、GROUP BY のように行を集約しません。構文:function() OVER (PARTITION BY ... ORDER BY ...)。よく使われる関数:ROW_NUMBER (連番)、RANK (飛びあり)、DENSE_RANK (飛びなし)、LAG/LEAD (前/次の行)、SUM/AVG (累計) です。

  2. 2
    SQL フォーマッター →

    ウィンドウ関数を含むクエリを整形して、PARTITION BY 句と ORDER BY 句を検証します。ウィンドウの指定が、計算にどの行が含まれるかを決定します。整形によりウィンドウフレームが明確になり、誤った結果のデバッグに役立ちます。

よくある質問

ROW_NUMBER、RANK、DENSE_RANK の違いは?
ROW_NUMBER は一意の連番です (1, 2, 3, 4)。RANK は同順位が同じ順位になり、その後に飛びが生じます (1, 2, 2, 4)。DENSE_RANK は同順位が同じ順位になり、飛びがありません (1, 2, 2, 3)。行の一意識別には ROW_NUMBER を、飛びありの競争順位には RANK を、飛びなしの連続順位には DENSE_RANK を使ってください。
ウィンドウ関数と GROUP BY の違いは?
GROUP BY は行をグループに集約します (グループごとに 1 行)。ウィンドウ関数はすべての行を保持し、計算列を追加します。集計 (カテゴリごとの合計) には GROUP BY を、文脈付きの行ごとの計算 (累計、カテゴリ内順位、前の値) にはウィンドウ関数を使ってください。

このタスクを解決するワークフロー

関連ツール