11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのGROUP_CONCAT関数が結構使える

Last updated at Posted at 2018-02-18

MySQLのGROUP BYはみなさんよく使っていると思います。
何かしらのグループごとにSUMとかCOUNTとかでSELECTするときです。

例えば、以下のようなデータをもつuser_groupというテーブルがあったとき、

group_id name age
A John 24
B Bob 22
A Tom 31
A Adam 19
B Mike 25
A Bill 33

例えば、こういうクエリを書くと、

SELECT group_id, COUNT(name) AS user_count
FROM user_group
GROUP BY group_id

以下のような結果がかえってきます。

group_id user_count
A 4
B 2

この4とか2とかの中身を知りたい!というときに役に立つのが、GROUP_CONCATです。
使い方はこんな感じ。

SELECT group_id, GROUP_CONCAT(name) AS user_list
FROM user_group
GROUP BY group_id

GROUP BYされている中身をカンマ区切りでリスト化してくれます。

group_id user_list
A John, Tom, Adam, Bill
B Bob, Mike

セパレーターや、並び順も変更することが可能。

SELECT group_id, GROUP_CONCAT(name ORDER BY age DESC SEPARATOR '|') AS user_list
FROM user_group
GROUP BY group_id

指定したセパレーターでsplitして、arrayで持つとかなり便利に持ち回れます。

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?