ウィンドウ関数(OVER句)とは?うぃんどうかんすう
ウィンドウ関数(OVER句)とは、集計しても明細行を残したまま、各行へ順位や集計値を添えられるSQLの機能。どの範囲を集計の対象にするかはOVER句で指定し、PARTITION BYで区切ってORDER BYで順序を与える。GROUP BYのように行が潰れないため、明細と集計を一つの結果として同時に返せるのが使いどころになる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
GROUP BYによる集計は、まとめた瞬間に明細行が消えてしまう。そのため「各明細に、その部署内での順位を添えて出す」といった要求は、同じ表をもう一度結合して数え上げるという遠回りで書くしかなかった。読みにくいうえ、データ量が増えると性能も出ない。集計の範囲を行ごとに指定できるようにして、この遠回りを言語の側で不要にしたのがウィンドウ関数である。
具体例
部署ごとの売上順位はRANK() OVER(PARTITION BY 部署 ORDER BY 売上 DESC)で得られる。日付順の累計はSUM(売上) OVER(ORDER BY 日付 ROWS UNBOUNDED PRECEDING)と書く。GROUP BYと違って明細行が残るので、明細と集計を一つの結果として同時に返せる。
試験での引っ掛け
順位付け関数の使い分けが定番の出題点で、RANKは同順位の次の番号を飛ばし、DENSE_RANKは飛ばさず、ROW_NUMBERは同値でも通し番号を振る。またウィンドウ関数はWHERE句には書けない。評価の順序としてWHEREのほうが先に処理されるためで、順位で絞り込むなら副問合せで包んで外側から条件を付ける必要がある。
関連用語
出た過去問
出典:令和6年度 秋期 応用情報技術者試験 午前 問30(IPA)解説で登場
"成績"表に対して、SQL文1と同一の結果を得るために、SQL文2のaに入れる字句はどれか。 〔SQL文1〕 SELECT R1.学生番号, R1.実施回, R…
正解:PARTITION BY 学生番号 ORDER BY 実施回
要点:PARTITION BYで区切りORDER BYで並べた連番1がグループ内の先頭行
SQL文1は学生番号ごとに最小の実施回、つまり各学生の初回の行を取り出している。同じ結果をウィンドウ関数(行をまとめずに区切りごとに計算する関数)で得るには、学生番号ごとにグループを区切り(PARTITION BY 学生番号)、実施回の昇順に並べて(ORDER BY 実施回)連番を振り、番号が1の行を選べばよい。
出典・参考
公式シラバスの3 技術要素 > 3. データ操作 > (2) データベース言語に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。