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

MySQLのCOUNT関数で重複行を無視する方法を解説

はじめに

はい、COUNT関数とDISTINCTキーワードを組み合わせることで、重複する行を無視することができます。基本的な構文は以下の通りです。

select count(distinct yourColumnName) from yourTableName;

MySQLでは、COUNT()関数は対象の行数を返します。ここにDISTINCTを組み合わせることで、重複する値を除外し、ユニークな(一意の)行だけをカウントできるようになります。

サンプルテーブルを作成する

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(10)
);
Query OK, 0 rows affected (0.47 sec)

レコードを挿入する

次に、insertコマンドを使ってテーブルにレコードを追加します。ここでは、意図的に「John」「Larry」「Mike」といった重複する名前を含めています。

mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)

テーブルの内容を確認する

selectコマンドを実行して、テーブルに登録されたレコードを表示してみます。

mysql> select *from DemoTable;

上記のクエリを実行すると、次のような出力が得られます。

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Larry     |
|  2 | John      |
|  3 | Sam       |
|  4 | John      |
|  5 | John      |
|  6 | Larry     |
|  7 | Mike      |
|  8 | Robert    |
|  9 | Carol     |
| 10 | Mike      |
+----+-----------+
10 rows in set (0.00 sec)

合計10件のレコードが登録されていますが、「John」が3件、「Larry」と「Mike」がそれぞれ2件含まれているため、重複データが混在している状態です。

DISTINCTで重複を除外してカウントする

COUNTで重複行を無視し、ユニークな行のみを集計するには、以下のようにクエリを記述します。

mysql> select count(distinct FirstName) from DemoTable;

このクエリを実行すると、次のような結果が返されます。

+---------------------------+
| count(distinct FirstName) |
+---------------------------+
|                         6 |
+---------------------------+
1 row in set (0.03 sec)

まとめ

実行結果として「6」という数値が返されました。これは、全10件のレコードの中に、重複を除いた6つのユニークな名前(Larry、John、Sam、Mike、Robert、Carol)が存在することを意味しています。このように、count(distinct カラム名) を使えば、重複する値を自動的に除外した正確な集計が簡単に行えます。ユーザー数やカテゴリ数など、実際のユニーク件数を知りたい場面でぜひ活用してください。

  1. MySQLでGROUP BYとHAVINGを使って重複行を検出する方法

    MySQLでテーブル内の重複行を見つけるには、GROUP BY句とHAVING句を組み合わせるのが最も基本的かつ効果的な方法です。この記事では、サンプルテーブルを作成し、実際に重複データを検出する手順をわかりやすく解説します。1. サンプルテーブルの作成まず、出荷日(ShippingDate)と顧客の国名(CustomerCountryName)を持つテーブルを作成します。mysql> create table DemoTable1494-> (-> ShippingDate datetime,-> CustomerCountryName varchar(20)->

  2. MySQLで複数のテーブルの行数(COUNT(*))を1つのクエリで取得する方法

    MySQLでは、サブクエリを組み合わせることで、複数のテーブルの行数を1つのクエリで同時に取得できます。基本となる構文は以下の通りです。SELECT (SELECT COUNT(*) FROM テーブル名1) AS エイリアス名1, (SELECT COUNT(*) FROM テーブル名2) AS エイリアス名2 FROM dual;構文のポイント各テーブルに対して COUNT(*) を含むスカラーサブクエリを作成し、それらを SELECT 句の中に並べます。MySQLでは FROM dual を指定することで、実際のテーブルを参照しないままサブクエリを評価できます(なお、My