さて、前回せっかく前振りをしたので、今回はHAVINGを実際に使用した結果について説明したいと思います。
前回同様、説明には以下のテーブルを使用します。
name | class |
---|---|
鈴木 | Aクラス |
田中 | Aクラス |
山田 | Bクラス |
佐藤 | Bクラス |
渡辺 | Bクラス |
中村 | Cクラス |
まずは、GROUP BYとWHEREを一緒に使ってみましょう。
SQL
SELECT class, COUNT(class) FROM TABLE1 WHERE name != '佐藤';
すると、結果は以下の通りになります。
class | COUNT(class) |
---|---|
Aクラス | 2 |
Bクラス | 2 |
Cクラス | 1 |
nameが「佐藤」のレコードが除外されるので、それ以外のレコードを集計した結果が表示されます。
このように、WHEREはGROUP BYが適用される前の段階の抽出条件を指定します。
次に、GROUP BYとHAVINGを一緒に使ってみましょう。
SQL
SELECT class, COUNT(class) AS class_cnt FROM TABLE1 HAVING class_cnt <= 2;
すると、結果は以下の通りになります。
class | class_cnt |
---|---|
Aクラス | 2 |
Cクラス | 1 |
HAVINGで指定された抽出条件によって、class_cntが2以下のレコードのみが表示されるので、そのまま集計するとclass_cntが3になってしまうBクラスは表示されなくなります。
これが、一般的なHAVINGの使用方法です。