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: 02. テストデータの挿入
次に、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 BYとCONCAT()を組み合わせれば、重複する姓名データを簡単に一意化して表示できます。なお、より簡潔に書きたい場合はDISTINCTキーワードを使う方法もあります。
select distinct concat(FirstName,' ',LastName) as combinedName from DemoTable;
どちらの方法でも同じ結果が得られますので、用途や可読性に応じて使い分けるとよいでしょう。
-
MySQLで重複しない日付(個別の値)を表示する方法
MySQLでは、datetime型のカラムから「日付のみ」を基準に重複を排除してデータを取得したいケースがよくあります。例えば、同じ日に複数の注文や出荷記録がある場合、日付単位で1件だけ取り出したいときなどです。本記事では、GROUP BYとDATE()関数を組み合わせて、重複しない日付ごとのレコードを表示する方法を解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。ここでは、出荷日時(ShippingDate)と顧客名(CustomerName)を持つテーブルを定義します。 mysql> create table DemoTable1996 (
-
Excelで氏名を姓・名・ミドルネームに分割する2つの方法
```html 顧客リストや名簿など、フルネームがひとつのセルにまとめて入力されたデータを扱うことは少なくありません。こうした名前を「名(ファーストネーム)」「ミドルネーム」「姓(ラストネーム)」の3つに分割できれば、並べ替えや絞り込み、集計作業が格段にしやすくなります。Microsoft Excelでは、区切り位置(Delimiter/Separator)機能を使う方法と、数式を使う方法の2通りで氏名を分割できます。 Excelで姓と名を分ける方法 氏名を姓と名に分ける主な目的は、社員や学生などのグループを、姓または名を基準に分類・整理することです。Excelでは、次の2つの方法で対応できま