MySQLで重複データを含む列から一意な値の件数を取得する方法
はじめに
MySQLでは、COUNT(DISTINCT 列名) を使うことで、重複する値を含む列から「重複を除いた一意な値の件数」を簡単に取得できます。この記事では、サンプルテーブルを作成しながら、具体的な手順と実行結果をわかりやすく解説します。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成しましょう。
mysql> create table DemoTable
(
StudentId int,
StudentFirstName varchar(100)
);
Query OK, 0 rows affected (0.88 sec)レコードの挿入
次に、INSERTコマンドでいくつかのレコードを挿入します。ここでは意図的に「John」と「Sam」を重複させて登録しています。
mysql> insert into DemoTable values(100,'John'); Query OK, 1 row affected (0.32 sec) mysql> insert into DemoTable values(101,'Chris'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(102,'John'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(103,'Sam'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(104,'Sam'); Query OK, 1 row affected (0.13 sec)
登録済みレコードの確認
SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような出力が得られます。
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 100 | John | | 101 | Chris | | 102 | John | | 103 | Sam | | 104 | Sam | +-----------+------------------+ 5 rows in set (0.00 sec)
重複を除いた件数を取得するクエリ
重複レコードを含む列から一意なレコードの数を表示するには、COUNT(DISTINCT ...) を使用します。
mysql> select count(distinct StudentFirstName) from DemoTable;
実行結果は以下の通りです。
+----------------------------------+ | count(distinct StudentFirstName) | +----------------------------------+ | 3 | +----------------------------------+ 1 row in set (0.00 sec)
結果の解説
テーブルには合計5件のレコードが存在しますが、StudentFirstName列の値は「John」「Chris」「Sam」の3種類だけです。COUNT(DISTINCT StudentFirstName) は重複を除外してカウントするため、結果は「3」となります。
まとめ
COUNT(DISTINCT 列名) を使えば、列内の一意な値の件数を簡単に集計できます。なお、DISTINCTを付けた場合、NULL値はカウント対象外になる点にも注意してください。データ分析や集計処理、重複チェックなどの場面で非常に役立つ構文なので、ぜひ活用してみてください。
-
MySQLで重複する値ごとのレコードを別の列に合計して表示する方法
MySQLでは、重複している値(同じ名前など)を持つ複数のレコードの数値を、名前ごとにまとめて合計したいケースがあります。このような場合には、集計関数SUM()とGROUP BY句を組み合わせることで簡単に実現できます。本記事では、実際にサンプルテーブルを作成し、重複する値を持つレコードを別の列(合計列)として集計・表示する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文を使ってテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(20), -> V
-
MySQLで重複するタプルを検出してカウントを表示する方法
MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入