グループ化したデータに対して検索条件を指定するには「HAVING」句を使います。
ここでは MySQLコマンド「HAVING」の具体的な使い方を解説していきます。
「HAVING」の基本
「HAVING」は、「GROUP BY」と組み合わせて使います。
以下のようにすると、データを「GROUP BY」でグループ化し、その結果に対して「HAVING」で絞り込み条件を加えられます。
SELECT カラム名 FROM テーブル名 GROUP BY カラム名 HAVING 検索条件;
グループ化したデータに対して検索条件を指定する
実際にMySQLサーバーに接続し、動作を確認してみましょう。
あらかじめ「test」データベースの「users」テーブルに、以下のようにデータが保存されている例で進めていきます。
name | gender |
age |
佐藤 | man | 21 |
鈴木 | woman | 25 |
田中 | woman | 21 |
山田 | man | 32 |
吉田 | man | 32 |
データを保存するコマンド例
CREATE DATABASE test;
USE test;
CREATE TABLE users (name VARCHAR(100), gender VARCHAR(100), age INT);
INSERT INTO users (name, gender, age) VALUES ('佐藤', 'man', 21);
INSERT INTO users (name, gender, age) VALUES ('鈴木', 'woman', 25);
INSERT INTO users (name, gender, age) VALUES ('田中', 'woman', 21);
INSERT INTO users (name, gender, age) VALUES ('山田', 'man', 32);
INSERT INTO users (name, gender, age) VALUES ('吉田', 'man', 32);
CREATE DATABASE 文の詳しい使い方はこちら。
USE 文の詳しい使い方はこちら。
CREATE TABLE 文の詳しい使い方はこちら。
INSERT INTO 文の詳しい使い方はこちら。
まずは「age」カラムの値でデータをグループ化し、それぞれのデータ数をカウントしてみましょう。コマンドは以下。
SELECT age, COUNT(*) FROM users GROUP BY age;
コマンドを実行すると、以下のように結果が表示されました。
COUNT関数の詳しい使い方はこちら。
それでは「HAVING」を使って、このグループ化したデータに対して検索条件を指定してみましょう。
「age」カラムの値が 25以上のデータのみ表示してみます。コマンドは以下。
SELECT age, COUNT(*) FROM users GROUP BY age HAVING age >= 25;
コマンドを実行すると、以下のように結果が表示されました。
別のパターンも試してみましょう。
今度はデータのカウント数が 2 の行のみ表示してみます。コマンドは以下。
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) = 2;
コマンドを実行すると、以下のように結果が表示されました。
まとめ
以上、MySQLコマンド「HAVING」の使い方でした!
ここまでの内容をまとめておきます。
- 「HAVING」でグループ化したデータに対して検索条件を指定することができる。
- 「GROUP BY」と組み合わせて使う。