SQLite | SQLite関数 | 列の値を連結する(group_concat関数)

group_concat関数は、指定した列の値を区切り文字で連結した文字列を返します。ここでは使い方を説明します。

group_concat関数の使い方

構文は次のとおりです。

group_concat(列名)

指定した列のNULL以外の値を連結します。GROUP BY句を使用すると、グループごとに結果を作成します。

デフォルトではカンマで値を区切ります。別の区切り文字を使う場合は第2引数に指定します。

group_concat(列名, 区切り文字)

例で使用するテーブルを作成します。

create table user (id integer, name text, gender text);
sqlite> create table user (id integer, name text, gender text);
sqlite> 

次のデータを追加します。

insert into user values (1, 'devkuma', 'Man');
insert into user values (2, 'kimkc', 'Woman');
insert into user values (3, 'araikuma', 'Man');
insert into user values (4, NULL, 'Man');
insert into user values (5, 'raccoon', 'Woman');
sqlite> insert into user values (1, 'devkuma', 'Man');
sqlite> insert into user values (2, 'kimkc', 'Woman');
sqlite> insert into user values (3, 'araikuma', 'Man');
sqlite> insert into user values (4, NULL, 'Man');
sqlite> insert into user values (5, 'raccoon', 'Woman');
sqlite> 

name列の値を連結します。

select group_concat(name) from user;
sqlite> select group_concat(name) from user;
group_concat(name)            
------------------------------
devkuma,kimkc,araikuma,raccoon
sqlite> 

NULL以外の名前がデフォルトのカンマで連結されました。

次に、gender列でグループ化し、各グループの名前を連結します。

select gender, group_concat (name) from user group by gender;
sqlite> select gender, group_concat (name) from user group by gender;
gender      group_concat (name)
----------  -------------------
Man         devkuma,araikuma   
Woman       kimkc,raccoon      
sqlite> 

GROUP BY句を使うと、グループごとに値が連結されます。詳細はデータをグループ化して合計と平均を計算する(GROUP BY句、HAVING句)を参照してください。

区切り文字を指定する

デフォルトのカンマを別の文字に変更するには、group_concatの第2引数に区切り文字を指定します。

次のクエリは、プラス記号(+)で名前を連結します。

select group_concat(name, '+') from user;
sqlite> select group_concat(name, '+') from user;
group_concat(name, '+')       
------------------------------
devkuma+kimkc+araikuma+raccoon
sqlite> 

指定したプラス記号で名前を区切った1つの文字列が表示されました。