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

MySQLで特定の列の一意な行数(ユニーク件数)を取得する方法

MySQLでは、COUNT()関数を使うことでテーブル内の行数を簡単に取得できます。さらに、DISTINCTキーワードと組み合わせることで、重複する値を除外し、一意な(ユニークな)行のみの件数をカウントすることが可能です。

この記事では、実際にテーブルを作成し、データを挿入したうえで、一意な行数を取得する手順を具体的に解説します。

サンプルテーブルの作成

まず、以下のSQLを実行してテーブルを作成します。

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

Id列には自動採番(AUTO_INCREMENT)の主キーを設定し、FirstName列に名前を格納するシンプルな構造です。

レコードの挿入

次に、INSERTコマンドを使ってテーブルに複数のレコードを挿入します。ここでは、意図的に同じ名前を複数回登録しています。

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件のレコードが登録されており、その中には「Larry」「John」「Mike」など重複した名前が含まれていることがわかります。

一意な行数だけをカウントする

重複行を除外して一意な行のみの件数を取得するには、COUNT(DISTINCT 列名)を使用します。

mysql> select count(distinct FirstName) from DemoTable;

このクエリを実行すると、以下の出力が得られます。

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

結果の解説

テーブルには10件のレコードがありますが、名前として存在するのは「Larry」「John」「Sam」「Mike」「Robert」「Carol」の6種類だけです。COUNT(DISTINCT ...)は重複を無視するため、結果は「6」と返されます。

このように、単純なCOUNT(*)COUNT(列名)ではなくCOUNT(DISTINCT 列名)を使うことで、重複データの中から固有の値の件数だけを効率よく集計できます。アンケートの回答者数やユーザーの重複排除など、実務でもよく使われるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで選択した行のサイズを取得する方法|CHAR_LENGTH()関数の使い方

    MySQLで選択した行のサイズを取得する方法MySQLで選択した行のサイズ(文字数)を取得するには、CHAR_LENGTH()関数を使用します。この関数は文字列の長さを返すため、SUM()関数と組み合わせることで、複数行にわたる合計サイズを簡単に算出できます。ここでは、実際にテーブルを作成しながら手順を詳しく解説していきます。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1612    -> (    -> Fi

  2. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(