Traffine I/O

日本語

2023-03-05

MySQLにおけるGROUP_CONCAT関数

MySQLにおけるGROUP_CONCAT

SQLデータベースでは、データを操作および管理する必要が頻繁にあります。MySQLは、もっとも人気のあるデータベース管理システムの1つであり、これらのタスクを効率的に実行するためのさまざまな関数を提供しています。その中の1つがGROUP_CONCAT関数です。

MySQLのGROUP_CONCAT関数は、複数の行からのデータを1つのフィールドに連結するために使用されます。これは、伝統的なグループ化ステートメントでは各グループに対して複数のデータ行が得られる多値出力の場合に特に有用です。

GROUP_CONCATの構文

以下はGROUP_CONCAT関数の基本的な構文です。

sql
GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])
  • DISTINCT: 重複エントリを削除するために使用される
  • expr: 連結したい列またはデータ
  • ORDER BY: 連結されたデータをソートするために使用される
  • SEPARATOR: 連結されたデータの間に区切り文字を追加することができる。デフォルトの区切り文字はカンマ(,

GROUP_CONCATの例

GROUP_CONCATのシンプルな例

シンプルな例として、次のデータを持つStudentsというテーブルを考えます。

ID Name Subject
1 Alice Math
2 Alice Science
3 Bob Math
4 Bob English

各学生の全ての科目をリストアップしたい場合、次のようにGROUP_CONCATを使用することができます。

sql
SELECT Name, GROUP_CONCAT(Subject)
FROM Students
GROUP BY Name;
Name GROUP_CONCAT(Subject)
Alice Math,Science
Bob Math,English

DISTINCTを使用したGROUP_CONCAT

次のデータを持つOrdersというテーブルを考えます。

OrderID Customer Product
1 Alice Apple
2 Alice Banana
3 Alice Apple
4 Bob Cherry

DISTINCTを使用して、各顧客の重複のない製品をリストアップすることができます。

sql
SELECT Customer, GROUP_CONCAT(DISTINCT Product)
FROM Orders
GROUP BY Customer;
Customer GROUP_CONCAT(DISTINCT Product)
Alice Apple,Banana
Bob Cherry

ORDER BYを使用したGROUP_CONCAT

連結されたリストを並べ替えたい場合は、ORDER BYを使用することができます。上記と同じOrdersテーブルを使用して、製品をアルファベット順に並べ替えることができます。

sql
SELECT Customer, GROUP_CONCAT(Product ORDER BY Product ASC)
FROM Orders
GROUP BY Customer;
Customer GROUP_CONCAT(Product ORDER BY Product ASC)
Alice Apple,Apple,Banana
Bob Cherry

SEPARATORを使用したGROUP_CONCAT

カンマ以外の区切り文字を使用したい場合は、SEPARATORを使用することができます。例えば、製品をセミコロンで区切りたい場合は次のようになります。

sql
SELECT Customer, GROUP_CONCAT(Product SEPARATOR ';')
FROM Orders
GROUP BY Customer;
Customer GROUP_CONCAT(Product SEPARATOR ';')
Alice Apple;Banana;Apple
Bob Cherry

参考

https://www.mysqltutorial.org/mysql-group_concat/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!