Mysql 重複を取り除いて件数を取得 COUNT DISTINCT

Mysql で重複の値を取り除いて件数をカウントしてくれる「COUNT DISTINCT」のメモ。


COUNT DISTINCT

サンプルとしてMysql公式のサンプルのworldDBで使用しております。

mysql> SELECT
  *
FROM
  `city`;
+----+----------------+--------------+---------------+------------+
| ID | Name           | CountryCode  | District      | Population |
+----+----------------+--------------+---------------+------------+
|  1 | Kabul          | AFG          | Kabol         |    1780000 |
|  2 | Qandahar       | AFG          | Qandahar      |     237500 |
|  3 | Herat          | AFG          | Herat         |     186800 |
|  4 | Mazar-e-Sharif | AFG          | Balkh         |     127800 |
|  5 | Amsterdam      | NLD          | Noord-Holland |     731200 |
………
……
…
.
+----+----------------+--------------+---------------+------------+

実際は4,079行入っています。

mysql> SELECT
  COUNT(*) AS COUNT
FROM
  `city`;
+-------+
| COUNT |
+-------+
|  4079 |
+-------+

city のテーブルに何件 CountryCode が入っているか検索するためにサブクエリを使用することになります。

mysql> SELECT
  COUNT(*) AS COUNT 
FROM
  (SELECT DISTINCT CountryCode FROM `city`) temp;
+-------+
| COUNT |
+-------+
|   232 |
+-------+

COUNT DISTINCTを使用すると以下のように簡単に出来ます。

mysql> SELECT
  COUNT(DISTINCT CountryCode) AS COUNT
FROM
  `city`;
+-------+
| COUNT |
+-------+
|   232 |
+-------+

これでサブクエリを使用することなく重複している行の件数を出力することが出来ます。


0 件のコメント :

コメントを投稿