集合関数と集計(GROUP BY・HAVING)とは?
集合関数と集計(GROUP BY・HAVING)とは、SQLで合計・平均・件数などを求める集合関数(SUM、AVG、COUNTなど)と、それをグループ単位で集計するGROUP BY句、集計結果に対してさらに条件を絞り込むHAVING句。WHERE句は集計前の行を絞り込むのに対し、HAVING句は集計後のグループを絞り込む点が異なる。
基本情報技術者試験の過去問では2回出題されています。
しゅうごうかんすうとしゅうけい
集合関数と集計(GROUP BY・HAVING)の意味
SQLで合計・平均・件数などを求める集合関数(SUM、AVG、COUNTなど)と、それをグループ単位で集計するGROUP BY句、集計結果に対してさらに条件を絞り込むHAVING句。WHERE句は集計前の行を絞り込むのに対し、HAVING句は集計後のグループを絞り込む点が異なる。
集合関数と集計(GROUP BY・HAVING)の具体例
「部署ごとの平均給与が30万円を超える部署だけを表示する」といった条件は、部署でGROUP BYした上でHAVING句で平均給与の条件を指定することで実現できる。
集合関数と集計(GROUP BY・HAVING)は試験でどう引っ掛けられる?
「行を絞り込みたいならWHERE、集計結果(グループ)を絞り込みたいならHAVING」という使い分けを取り違えやすい。
集合関数と集計(GROUP BY・HAVING)と関連する用語
集合関数と集計(GROUP BY・HAVING)が出た過去問
“得点”表から、学生ごとに全科目の点数の平均を算出し、平均が80点以上の学生の学生番号とその平均点を求める。aに入れる適切な字句はどれか。ここで、実線の下線は主…
正解:学生番号 HAVING AVG(点数) >= 80
要点:集約結果での絞り込みはWHEREでなくHAVINGを使う
学生ごとの平均を出すには、集計の単位となる学生番号でGROUP BYする必要がある。さらに「平均が80点以上」という条件は集約関数の結果に対する絞り込みなので、行単位で働くWHEREではなくグループ単位で働くHAVINGを使う。よって学生番号でグループ化し、HAVINGで平均点を判定する形になる。
出典:令和1年度 秋期 基本情報技術者試験 午前 問26(IPA)"中間テスト"表からクラスごと、教科ごとの平均点を求め、クラス名、教科名の昇順に表示するSQL文中のaに入れる字句はどれか。 中間テスト(クラス名、教科名、学生…
正解:GROUP BY クラス名, 教科名 ORDER BY クラス名, 教科名
要点:GROUP BYは集計の単位、ORDER BYは並べ替えの順序
クラスと教科の組合せごとに平均を出すので、GROUP BYにはクラス名と教科名の両方を指定する。学生番号まで含めると学生1人ごとの集計になってしまい、求める粒度と合わない。並び順の指定はクラス名、教科名の昇順なので、ORDER BYにはこの2つを順に書く。
出典:令和1年度 春期 基本情報技術者試験 午前 問27(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。