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

MySQLクエリでDISTINCTとCOUNTを組み合わせて使う方法

MySQLでDISTINCTとCOUNTを組み合わせる方法

MySQLでは、DISTINCTCOUNTを1つのクエリ内で同時に使用することができます。この組み合わせを活用すると、重複する値を除外した上でレコード数をカウントできるため、ユニークなデータの件数を簡単に求められます。

それでは、実際にサンプルテーブルを作成して動作を確認していきましょう。テーブルの作成にはCREATE TABLEコマンドを使用します。

mysql> create table DistCountDemo
   -> (
   -> id int,
   -> name varchar(100),
   -> age int
   -> );
Query OK, 0 rows affected (0.48 sec)

続いて、INSERTコマンドを使ってレコードを挿入します。ここでは、あえて同じ名前と年齢のデータ(John・23歳)を2件登録し、重複データが存在する状態を作っています。

mysql> insert into DistCountDemo values(1,'John',23);
Query OK, 1 row affected (0.11 sec)

mysql> insert into DistCountDemo values(2,'Bob',24);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DistCountDemo values(3,'John',23);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DistCountDemo values(4,'Carol',23);
Query OK, 1 row affected (0.20 sec)

SELECT文を実行して、テーブルに登録されたすべてのレコードを確認してみましょう。

mysql> select *from DistCountDemo;

以下が出力結果です。

+------+-------+------+
| id   | name  | age  |
+------+-------+------+
|    1 | John  |   23 |
|    2 | Bob   |   24 |
|    3 | John  |   23 |
|    4 | Carol |   23 |
+------+-------+------+
4 rows in set (0.00 sec)

COUNT(DISTINCT)で重複を除いた件数を取得する

ここで、COUNT関数とDISTINCTキーワードを組み合わせて、「年齢が23歳の学生」のうち、名前の重複を除外した人数を求めてみます。

mysql> SELECT COUNT(DISTINCT name) from  DistCountDemo WHERE age=23;

以下が出力結果です。

+----------------------+
| COUNT(DISTINCT name) |
+----------------------+
|                    2 |
+----------------------+
1 row in set (0.05 sec)

結果の解説

年齢が23歳のレコードは全部で3件あります(id: 1、3、4)。しかし、そのうち「John」が2回出現しているため、DISTINCTによって重複が除外され、一意な名前は「John」と「Carol」の2つだけとなります。そのため、クエリの結果は2と表示されます。

補足:NULL値の扱いと応用

COUNT(DISTINCT カラム名)は、対象カラムがNULLのレコードを自動的に除外してカウントします。また、COUNT(DISTINCT col1, col2)のように複数カラムを指定すれば、その組み合わせが一意であるレコード数を取得することも可能です。大量データを扱う場合はインデックスの活用や集計範囲の絞り込みを検討すると、パフォーマンスの向上が期待できます。

  1. MySQLの単一クエリでGROUP BYとCOUNTを使い、重複レコードをグループ化して最大値を表示する方法

    MySQLでは、GROUP BY句とCOUNT()関数を組み合わせることで、重複する値を持つレコードを効率的にグループ化できます。さらにMAX()関数を併用すれば、各グループ内の最大値も同時に取得可能です。本記事では、具体的な手順を実行例とともに解説します。テーブルの作成まず、サンプルとなるテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> ClientId int,    -> Value

  2. MySQLで重複するタプルを検出してカウントを表示する方法

    MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入