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つの文字列が表示されました。