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

【MySQL入門】DISTINCTを使ってテーブルの重複値を1回だけ取得する方法

重複する値を1回だけ選択するには?

テーブル内に同じ値が何度も繰り返し格納されている場合、DISTINCTキーワードを使用することで、重複を排除した状態で値を1回だけ取得できます。

基本構文

構文は以下のとおりです。

SELECT DISTINCT yourColumnName FROM yourTableName;

それでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table displayOnlyDistinctValue
    -> (
    -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName varchar(100),
    -> UserAge int
    -> );
Query OK, 0 rows affected (0.47 sec)

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。意図的に「Larry」や「Sam」などの名前や年齢を重複させています。

mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',23);
Query OK, 1 row affected (0.23 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Mike',23);
Query OK, 1 row affected (0.13 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',21);
Query OK, 1 row affected (0.16 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Carol',25);
Query OK, 1 row affected (0.16 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',26);
Query OK, 1 row affected (0.14 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',27);
Query OK, 1 row affected (0.13 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Bob',22);
Query OK, 1 row affected (0.17 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',22);
Query OK, 1 row affected (0.16 sec)

現在のテーブル内容を確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from displayOnlyDistinctValue;

実行結果は以下のとおりです。

+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 1      | Larry    | 23      |
| 2      | Mike     | 23      |
| 3      | Larry    | 21      |
| 4      | Sam      | 23      |
| 5      | Carol    | 25      |
| 6      | Sam      | 26      |
| 7      | Sam      | 27      |
| 8      | Bob      | 22      |
| 9      | Larry    | 22      |
+--------+----------+---------+
9 rows in set (0.00 sec)

このように、UserName列には「Larry」が3回、「Sam」が3回、UserAge列にも「23」や「22」などが複数回登場しています。

DISTINCTを使った重複排除の実例

ここからは、DISTINCTキーワードを使って重複する値を1回だけ取得する方法を、2つのケースに分けて紹介します。

ケース1:UserName列で重複を排除する

ユーザー名の一意なリストを取得するクエリは以下のとおりです。

mysql> select distinct UserName from displayOnlyDistinctValue;

実行結果:

+----------+
| UserName |
+----------+
| Larry    |
| Mike     |
| Sam      |
| Carol    |
| Bob      |
+----------+
5 rows in set (0.00 sec)

重複していた「Larry」と「Sam」がそれぞれ1回だけ表示され、一意な名前が5件取得できました。

ケース2:UserAge列で重複を排除する

次に、年齢の一意なリストを取得するクエリです。

mysql> select distinct UserAge from displayOnlyDistinctValue;

実行結果:

+---------+
| UserAge |
+---------+
| 23      |
| 21      |
| 25      |
| 26      |
| 27      |
| 22      |
+---------+
6 rows in set (0.00 sec)

重複のなかった年齢も含め、一意な値が6件返されました。

まとめ

このように、SELECT DISTINCTを使うことで、指定した列から重複する値を取り除き、一意な値だけを簡単に抽出できます。データの集計や分析、マスタデータの確認など、さまざまな場面で活用できる基本的かつ重要な構文なので、ぜひ覚えておきましょう。

  1. 【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法

    サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1     -> (     -> Id int,     -> SubjectName varchar(20)     -> )

  2. MySQLでテーブルから順序付けられた3行のみを取得する方法

    ORDER BY句とLIMITを組み合わせて順序付きの3行を取得する MySQLでテーブルから特定の順序で並べ替えた行を、指定した件数だけ取得したい場合は、ORDER BY句とLIMITを組み合わせます。ここでは、従業員IDの降順に並べ替えた上位3行を取得する具体例を紹介します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1551    -> (    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIM