窓関数とは?まどかんすう
窓関数とは、行をまとめずに、各行から見える範囲(ウィンドウ)を対象として集計や順位付けを行い、結果を元の行に列として付け足す関数。OVER句のPARTITION BYで範囲を区切り、ORDER BYで範囲内の順序を与える。GROUP BYと違って行数が減らない。
最終更新:2026-10-06
この語が出る過去問を解く →背景
GROUP BYは行を潰してしまうため、明細と集計を同じ結果に並べたい要求——構成比、累計、部門内順位、前月との差——を書こうとすると、同じ表への自己結合や副問合せを何段も重ねることになっていた。読みにくいうえ表を何度も走査する。行を残したまま範囲付きの計算を付加する演算がSQL:2003で標準化され、この定型が1文で書けるようになった。
具体例
SUM(金額) OVER (PARTITION BY 会員番号 ORDER BY 受注日) で会員ごとの累計購入額を明細行に付ける。RANK() OVER (PARTITION BY 店舗コード ORDER BY 売上 DESC) なら店舗内の売上順位が各行に付く。
試験での引っ掛け
RANKは同順位の後で順位が飛び(1,1,3)、DENSE_RANKは飛ばず(1,1,2)、ROW_NUMBERは同値でも一意な連番を振る。またWHERE句では窓関数を使えない——評価がWHEREより後なので、絞り込むには副問合せで包む必要がある。
関連用語
出た過去問
出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)解説で登場
"成績"表から、クラスごとに得点の高い順に個人を順位付けした結果を求めるSQL文の、aに入れる字句はどれか。 〔SQL文〕 SELECT 氏名, クラス, 得点…
正解:RANK
要点:RANKはPARTITIONごとに1から順位を付ける窓関数
OVER句でPARTITION BYにより区分し、ORDER BYで並べた中での順位を返す窓関数が必要である。RANKはこの用途の関数で、区分ごとに1から順位を付け直す。結果表もクラスごとに1から始まっているのでRANKが該当する。
出典・参考
高度試験 午前I(高度午前I 相当)のシラバスの3 技術要素 > 3. データ操作 > (2) データベース言語に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。