グループ化した値を連結する「GROUP_CONCAT関数」令和2年 6月 25日 作成
概略
「GROUP_CONCAT関数」とは「GROUP BY句」で集約をしたデータを指定したカラム内に含まれる値を指定した区切り文字(カンマ【,】等)にて連結した文字列として取得する事ができる。
手段
対象となるカラムを関数の引数に指定するだけです。「GROUP BY句」が使われている場合はグループ毎に行われる。
実装方法
構文
GROUP_CONCAT(カラム名, 区切り文字)
下記テーブルがあるとします。
テーブル A(table_a) +----+---------+ | id | os | +----+---------+ | 1 | windows | | 2 | mac | | 3 | linux | +----+---------+ テーブル B(table_b) +----+---------+ | id | user_id | +----+---------+ | 1 | 101 | | 1 | 102 | | 2 | 103 | | 2 | 104 | | 2 | 105 | | 3 | 106 | | 3 | 107 | +----+---------+
次のようなSQL文を作成・実行すると
SELECT table_a.id table_a.os table_b.user_id FROM table_a JOIN table_b ON table_a.id = table_b.id GROUP BY table.id; +----+---------+---------+ | id | os | user_id | +----+---------+---------+ | 1 | windows | 101 | | 2 | mac | 103 | | 3 | linux | 106 | +----+---------+---------+
もちろん[user_id]は先頭の値しか取得できません。
そこで重宝するのが「GROPU_CONCAT関数」です。
先ほどのSQL文を「GROUP_CONCAT関数」を加えて書き換えます
SELECT table_a.id table_a.os GROUP_CONCAT(table_b.user_id) as USERID FROM table_a JOIN table_b ON table_a.id = table_b.id GROUP BY table.id; +----+---------+-------------+ | id | os | USERID | +----+---------+-------------+ | 1 | windows | 101,102 | | 2 | mac | 103,104,105 | | 3 | linux | 106,107 | +----+---------+-------------+
昇順・降順に並べ替えもできます
GROUP_CONCAT(table_b.od_id ORDER BY table_b.id ASC)
区切り文字指定もできます。
GROUP_CONCAT(table_b.od_id separator '/')
考察
使いこなせると便利な「GROUP_CONCAT関数」。
とても便利で使用する場面も多いかと思います。
注意点:
最大の長さに制限がある(デフォルト値は「1024」。環境設定にて変更可能。)
最後までお読み下さり ありがとうございました。記事はここ迄です。
尚、本記事は作成から「3年以上」経過しています。
記事作成当時と現在の状況等により内容が適切でない場合があります。また、リンク切れが生じている場合もあります事を予めご了承下さい。
お気に入りに登録しますとお気に入り記事を一元管理でき、再度閲覧したい場合等 容易に記事を探し出す事ができますのでご活用下さい。
下段にはコメントを掲載しております。
広告バナー
コメント
頂いたコメントを下記に掲載しております。更に下部にはコメント投稿フォームを設けております。
注意事項を確認・了承した上、コメント投稿お願いいたします。
注意事項に該当するコメントにつきましては、事前告知なしに投稿したコメントの削除を行う場合があります。
予めご了承下さい。
- 記事内容と無関係なコメント
- 公序良俗に反するコメント
- 個人情報や法令違反を含むコメント
- その他、管理者が不適切と判断したコメント
現在 頂いているコメントはありません