2014年7月7日月曜日

MySQLのGROUP_CONCAT という関数がものすごく便利な件

簡単に言ってしまうと、複数行のデータを、ぐちゃっと1行に纏めてくれる関数です。

SQL


select group_concat(column_name) from information_schema.columns
where table_schema = 'information_schema' and table_name = 'COLLATIONS'

結果


COLLATION_NAME,CHARACTER_SET_NAME,ID,IS_DEFAULT,IS_COMPILED,SORTLEN


ちなみに、group_concatを使わずに取れるデータがこれ。

-------------------------------
COLLATION_NAME
CHARACTER_SET_NAME
ID
IS_DEFAULT
IS_COMPILED
SORTLEN
-------------------------------
複数行のデータが、1行にまとまっていることがわかります。


親子の関連を持つデータで、このデータを横並び表示したい時とかにも活用できそうです。

注意点

●戻せるデータのサイズが決まってます。(設定で変更可能)
[my.ini]の[mysqld]セクションに以下を記載すると反映されます。(要再起動
set group_concat_max_len = 2048000;
※2MBにしています

●NULLを含むデータの場合、NULLが除外されます。

応用

・区切り文字をタブへ変えて、並び順を指定しています
・NULLは、ブランクへ置き換える事により、除外されることを防止しています



select group_concat(CASE WHEN column_name IS NULL THEN '' ELSE column_name END order by ordinal_position separator '\t') from information_schema.columns
where table_schema = 'information_schema' and table_name = 'COLLATIONS'

補足

Oracleでも、11gより同等の関数があるようです。

0 件のコメント: