【MySQL】group_concat関数を使って複数レコードを1行にまとめる

2019年1月6日日曜日

mysql データベース 関数

t f B! P L

group_concat関数を使って複数レコードを1行にまとめる



テーブルリレーションした時など、
複数レコードが取得できるデータをカンマ区切りで
1レコードにまとめたいと思ったことはないでしょうか?

MySQLの場合、group_concat関数を使えば可能です



データ例

下記のようなデータを用意します。

mysql> select * from animal;
+----+---------+
| id | name    |
+----+---------+
|  1 | cat     |
|  2 | dog     |
|  3 | bird    |
|  4 | cat     |
+----+---------+

group_concatを使う

group_concat を使えばこんな感じで、カンマ区切りで1つのデータにまとめれます。
ちなみに separator を「スペース」や「ハイフン」にすること可能です。

mysql> select group_concat(distinct name order by name desc separator ',') from animal;
+--------------------------------------------------------------+
| group_concat(distinct name order by name desc separator ',') |
+--------------------------------------------------------------+
| dog,cat,bird                                                 |
+--------------------------------------------------------------+


区切りの件数を制御する

group_concat は limit をサポートしていません。
なので、group_concat関数内で、limit を使ってもエラーが発生します。
まとめる件数を制御したい場合は、substring_index を組み合わせることで可能です


mysql> select substring_index(group_concat(distinct name order by name desc separator ','), ',', 2) as name from animal;
+---------+
| name    |
+---------+
| dog,cat |
+---------+

Translate

このブログを検索

フォロワー

QooQ