【SQL基礎】GROUP BY句の基本構文~HAVING句での絞り込み~
—–
GROUP BY句の基本構文では、データをグループ化する方法について触れました。
本項では、「HAVING句」を使ってさらに条件を指定して、結果を絞り込む方法について説明していきます。
—–
HAVING句とは
HAVING句はGROUP BY句によってグループ化されたデータに対して条件を指定してデータを絞り込む場合に使用します。
HAVING句の条件式に記述できるのはグループ化に指定したカラム名や関数を使ってグループ単一で集計した結果だけとなります。
HAVING句については以下の図を参考にして動作をイメージしてください。
①データベースの中から取得したいテーブルを取り出す。
例えば、データベースの中に以下のようなstoreテーブルがあるとしましょう。
図ではstoreテーブルに格納されているデータ全体が表示されています。
②データのグループ化
テーブル全体のデータが表示されていると、確認したいデータを見つけるのに手間がかかってしまいます。
そのような場合に、データをグループ化してあげると、指定したデータのみ表示してくれるので確認したいデータをすぐに確認できます。
例えばstoreテーブルで場所とメニューごとにグループ化すると、それだけが表示されます。
③条件と一致するグループを取り出す。
②でグループ化したデータに対して条件を指定することで、さらにデータを絞り込むことができます。
例えば1000円以上するメニューのみ表示させたとすると、これだけ見やすくなるのです。
—–
HAVING句の基本構文
HAVING句の基本構文は以下の通りです。
SELECT 取得したいカラム名
FROM 対象とするテーブル名
GROUP BY グループ化したいカラム名
HAVING 取得したいグループの条件
HAVING句はGROUP BY句の後に記述する必要があるので注意してください。
また、HAVING句には取得したいデータの条件として、集約関数を条件に含めることができます。
—–
グループ化した結果に対して条件を指定して絞り込む
HAVING句を使ってグループ化した結果に条件を指定します。
今回は以下のテーブル(テーブル名store)を使用します。
SELECT * FROM store
HAVING句を使って価格の平均が1000円以下のメニューだけを抽出します。
SELECT place , avg(value) FROM store GROUP BY place HAVING avg(value) <= 1000 ;
HAVING句の中でAVG関数を使い各メニューの中から平均価格が1000円以下のものを抽出しました。
他の関数も使用できるので順番に確認していきましょう。
・MAX関数
各メニューごとにグループ化を行った上で、MAX関数を使い一番高い価格を表示します。
SELECT menu , MAX(value) FROM store GROUP BY menu HAVING MAX(value) ;
・MIN関数
各メニューごとにグループ化を行った上で、MIN関数を使い一番低い価格を表示します。
SELECT menu , MIN(value) FROM store GROUP BY menu HAVING MIN(value) ;
・SUM関数
各メニューごとにグループ化を行った上で、SUM関数を使い価格の合計を表示します。
SELECT menu, SUM(value) FROM store GROUP BY menu HAVING SUM(value) ;
—–
今回の学習ポイント
・グループ化されたデータに対してさらに条件を指定して結果を絞り込む場合はHAVING句を使用する。
・HAVING句はGROUP BYの後に記述する必要がある。
・取得したいグループの条件として集約関数をHAVING句の条件に含めることができる。
練習問題
問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。
[sql]CREATE DATABASE worldcup2014;
USE worldcup2014;
Source C/worldcup2014.sql
[/sql]
- 各グループのランキングの平均を算出する。
- 全選手の中から身長が195㎝以上の選手を抽出する。
以上、HAVING句での絞り込みについてでした。