用語集のすべての用語

ウィンドウ関数

PostgreSQL のウィンドウ関数とは?

ウィンドウ関数は、順位や累計など、関連する行の集合にわたって値を計算します。GROUP BY のようにそれらの行を 1 行にまとめることはありません。

ウィンドウ関数は、OVER 句で定義される、現在の行に関連する行の集合にわたって計算を行います。GROUP BY を使った集約とは異なり、すべての入力行が出力に残り、それぞれに結果が付きます。

PARTITION BY は行をグループに分け、ORDER BY は各グループ内の順序を決めます。組み込みのウィンドウ関数には row_number、rank、dense_rank、lag、lead、first_value などがあり、sum や avg などの通常の集約関数も OVER と組み合わせて使えます。ウィンドウ関数を使えるのは、クエリの SELECT リストと ORDER BY 句の中だけです。

例

この例では、チーム内でプレイヤーに順位を付け、各行の横にチームの合計得点を表示します。

CREATE TABLE scores (player text, team text, points int);
INSERT INTO scores VALUES
  ('ana', 'red', 30), ('ben', 'red', 25), ('cy', 'blue', 40), ('dee', 'blue', 35);

SELECT player, team, points,
       rank() OVER (PARTITION BY team ORDER BY points DESC) AS team_rank,
       sum(points) OVER (PARTITION BY team) AS team_total
FROM scores
ORDER BY team, team_rank;

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語