MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで3回以上出現するレコードを表示する方法

MySQLで3回以上出現するレコードを表示したい場合は、GROUP BY句とHAVING句を組み合わせて使用します。まずはサンプルテーブルを作成してみましょう。

mysql> create table DemoTable
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Subject varchar(100)
    -> );
Query OK, 0 rows affected (0.53 sec)

続いて、insertコマンドを使用してテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable(Subject) values('MySQL');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable(Subject) values('MySQL');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.56 sec)

mysql> insert into DemoTable(Subject) values('SQL Server');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(Subject) values('MySQL');
Query OK, 1 row affected (0.48 sec)

select文を使って、テーブル内のすべてのレコードを表示してみます。

mysql> select *from DemoTable;

出力結果

+----+------------+
| Id | Subject    |
+----+------------+
| 1  | MySQL      |
| 2  | MongoDB    |
| 3  | MySQL      |
| 4  | Java       |
| 5  | SQL Server |
| 6  | MongoDB    |
| 7  | MySQL      |
+----+------------+
7 rows in set (0.00 sec)

上記の出力結果を見ると、「MySQL」が3回、「MongoDB」が2回出現していることが確認できます。それでは、2回より多く(つまり3回以上)出現するレコードのみを抽出するクエリを見ていきましょう。

mysql> select Subject,count(Subject) freq from DemoTable
   -> group by Subject
   -> having count(Subject) > 2;

出力結果

+---------+------+
| Subject | freq |
+---------+------+
| MySQL   | 3    |
+---------+------+
1 row in set (0.00 sec)

HAVING count(Subject) > 2 という条件によって、出現回数が2回を超える(3回以上の)「Subject」だけが結果に表示されます。この例では「MySQL」のみが3回出現しているため、該当するレコードとして返されています。なお、条件を変更すれば「4回以上」「5回以上」など、任意の出現回数での絞り込みも簡単に行えます。

  1. MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法

    MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (

  2. MySQLでTRUE/FALSEのレコードを0/1として表示する方法

    MySQLでTRUE/FALSEのレコードを0/1として表示する方法MySQLでは、カラムのデータ型をBOOLEANとして定義することで、TRUE/FALSEの値が自動的に0と1として表示されます。BOOLEAN型は内部的にはTINYINT(1)のエイリアスであり、TRUEは1、FALSEは0として扱われます。以下、具体的な手順を解説します。1. テーブルの作成まず、BOOLEAN型のカラムを含むテーブルを作成しましょう。mysql> create table DemoTable2035     -> (