【MySQL】グループ化したデータに検索条件を指定する(having の使い方)

グループ化したデータに対して検索条件を指定するには「HAVING」句を使います。

ここでは MySQLコマンド「HAVING」の具体的な使い方を解説していきます。

 

「HAVING」の基本

「HAVING」は、「GROUP BY」と組み合わせて使います。

以下のようにすると、データを「GROUP BY」でグループ化し、その結果に対して「HAVING」で絞り込み条件を加えられます。

SELECT カラム名 FROM テーブル名 GROUP BY カラム名 HAVING 検索条件;
メモ

SELECT 文の詳しい使い方はこちら

GROUP BY 句の詳しい使い方はこちら

 

グループ化したデータに対して検索条件を指定する

実際に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」と組み合わせて使う。