ワールドカップはじまりましたね!
普段はサッカーを観戦したりはしないのですが、お祭り的な雰囲気が好きで見てしまいます。
おひさしぶりです。塚原です。
健忘禄も兼ねて mysqlの GROUP_CONCAT を紹介します。
同一のカテゴリーのデータが複数行にあるものを1カテゴリー1行で出したいなんてことあると思います。
例えば、以下のアンケートで複数回答したようなデータがあるとします。
そんなデータを「ユーザごと回答を抜き出してよ」なんてときに便利なのが GROUP_CONCAT です。
1 2 3 4 5 6 7 |
SELECT user_id, GROUP_CONCAT( answer_id SEPARATOR ',' ) as 'answer' ↑ まとめたいカラムにかぶせる ↑ 区切り文字を指定できる FROM answer_data GROUP BY user_id; |
これを実行した結果が以下です。
「いやいや、答えはIDでほしいんじゃないんだよ」と言われた場合は、ちょっと応用してこちら
こんなマスタデータがあったとすると
1 2 3 4 5 6 7 |
SELECT user_id, GROUP_CONCAT(( SELECT answer FROM answer_data WHERE id = answer_id ) SEPARATOR ',' ) as 'answer' ↑ 中にSELECT文をかますこともできる FROM answer_data GROUP BY user_id; |
こんな風にすると以下のように出せます。
更に文字列を連結する CONCAT の機能も使えるのでカンマ区切れば文字を付け加えることもできます。
1 2 3 4 5 6 7 |
SELECT user_id, GROUP_CONCAT( '*', ( SELECT answer FROM answer_data WHERE id = answer_id ) SEPARATOR ',' ) as 'answer' ↑共通で文字を付け加えることができる FROM answer_data GROUP BY user_id; |
他にも DISTINCT を使って重複をなくすとか ORDER BY で並び替えもできます。
プログラム内で使うことはあまりないかもしれませんが、ちょっと抜き出して見てみたいなんてときに非常に役立ちます。
SQL、組み方もいろいろですが、まだまだ知らない機能もたくさんありますね。。。
徐々にお勉強して幅を広げていきたいと思います!
それではまた!
名の由来は「天祐」。 そのままではおこがましいので 天の字から1本棒をとればと叔父がつけてくれたもの。 名に恥じぬよう世の中の助けとなるものを創り出していきたいです。 for Facebookのサポート・運用開発の部隊に所属しています。