以前にデータの抽出条件を設定するWHERE句、
データ範囲に線引してグループ化するGROUP BY句を紹介しました。
www.excellovers.com
https://www.excellovers.com/entry/excelsql18www.excellovers.com
ではグループ化した後のデータに抽出条件を設定するにはどうしたら良いでしょうか?
そういう時はWHERE句ではなく、HAVING句を使用します。
HAVING句
HAVING句の構文は以下のとおりです。
select 列名 from テーブル名 group by 列名 having 条件式
HAVING句はGROUP BY句で集約されたデータに対して使用します。
つまりGROUP BY句とセットで使用します。
GROUP BY句で集約した後のデータに対してWHERE句を使用することはできません。
HAVING句の記載箇所はGROUP BY句の後になります。
HAVING句の条件式に記載できるのは下記のとおりです。
- GROUP BY句で使用した列
- 集約関数
- 定数
HAVING句使用例
HAVING句の前段階として下記のようなSQL文で集計しています。
この集計後のデータのうち、合計点が180以上のデータを抽出する場合。
GROUP BY句の後にHAVING句を記載して集約後のデータを対象に抽出判定を行います。
HAVING句の動作のイメージ
- GROUP BY句でデータに対して線を引いて範囲を区切る
- 学生ID毎の合計点(SUM関数)を算出。
- 学生ID毎の合計点が180以上(>= 180)か判定。
- 学生ID「100」と「300」が条件を満たしている。
- 学生ID「100」と「300」のSELECT文に指定したデータを表示
HAVING句で指定した条件とSELECT文で表示するデータが一致している必要はありません。
次回からは関数を紹介していきます。