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

MySQLのGROUP BYとCONCAT()を使って氏名を重複なく表示する方法

MySQLでは、GROUP BY句とCONCAT()関数を組み合わせることで、重複している姓名(First Name・Last Name)のデータを1つにまとめて、区別された形で表示できます。この記事では、実際のサンプルコードと実行結果をもとに、その手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、氏名情報を格納するためのテーブルを作成し、検索を高速化するためにインデックスも追加しておきましょう。

mysql> create table DemoTable
(
    FirstName varchar(100),
    LastName varchar(100)
);
Query OK, 0 rows affected (0.92 sec)
mysql> alter table DemoTable add index(FirstName,LastName);
Query OK, 0 rows affected (1.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

2. テストデータの挿入

次に、INSERT文を使ってテーブルにレコードを挿入します。ここでは意図的に同じ氏名を重複して登録しています。

mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (1.17 sec)
mysql> insert into DemoTable values('John','Doe');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Carol','Taylor');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('John','Doe');
Query OK, 1 row affected (0.66 sec)

3. 登録済みデータの確認

SELECT文でテーブル内の全レコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のように重複した氏名が含まれた結果が得られます。

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam      | Smith    |
| Adam      | Smith    |
| Carol     | Taylor   |
| John      | Doe      |
| John      | Doe      |
+-----------+----------+
5 rows in set (0.00 sec)

4. GROUP BYとCONCAT()で氏名を重複なく結合表示する

ここが本題です。CONCAT()関数で姓と名をスペース区切りで連結し、GROUP BY句でグループ化することで、重複のない氏名リストを取得できます。

mysql> select concat(FirstName,' ',LastName) as combinedName from DemoTable
group by LastName,FirstName;

実行結果は以下の通りです。「Adam Smith」と「John Doe」がそれぞれ1件にまとめられ、3件の一意な氏名だけが表示されています。

+--------------+
| combinedName |
+--------------+
| Adam Smith   |
| Carol Taylor |
| John Doe     |
+--------------+
3 rows in set (0.00 sec)

まとめ

GROUP BYCONCAT()を組み合わせれば、重複する姓名データを簡単に一意化して表示できます。なお、より簡潔に書きたい場合はDISTINCTキーワードを使う方法もあります。

select distinct concat(FirstName,' ',LastName) as combinedName from DemoTable;

どちらの方法でも同じ結果が得られますので、用途や可読性に応じて使い分けるとよいでしょう。

  1. MySQLで重複しない日付(個別の値)を表示する方法

    MySQLでは、datetime型のカラムから「日付のみ」を基準に重複を排除してデータを取得したいケースがよくあります。例えば、同じ日に複数の注文や出荷記録がある場合、日付単位で1件だけ取り出したいときなどです。本記事では、GROUP BYとDATE()関数を組み合わせて、重複しない日付ごとのレコードを表示する方法を解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。ここでは、出荷日時(ShippingDate)と顧客名(CustomerName)を持つテーブルを定義します。 mysql> create table DemoTable1996 (

  2. Excelで氏名を姓・名・ミドルネームに分割する2つの方法

    ```html 顧客リストや名簿など、フルネームがひとつのセルにまとめて入力されたデータを扱うことは少なくありません。こうした名前を「名(ファーストネーム)」「ミドルネーム」「姓(ラストネーム)」の3つに分割できれば、並べ替えや絞り込み、集計作業が格段にしやすくなります。Microsoft Excelでは、区切り位置(Delimiter/Separator)機能を使う方法と、数式を使う方法の2通りで氏名を分割できます。 Excelで姓と名を分ける方法 氏名を姓と名に分ける主な目的は、社員や学生などのグループを、姓または名を基準に分類・整理することです。Excelでは、次の2つの方法で対応できま