group_concat
説明
グループ内の非NULL値を1つの文字列に連結します。sep
引数を使用でき、指定しない場合はデフォルトで ,
です。この関数は、複数の行の値を1つの文字列に連結するために使用できます。
group_concat は、3.0.6以降の3.0バージョンおよび3.1.3以降の3.1バージョンで DISTINCT と ORDER BY をサポートします。
構文
VARCHAR GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR sep])
パラメータ
expr
: 連結する値で、NULL値は無視されます。VARCHAR に評価される必要があります。出力文字列から重複する値を排除するためにDISTINCT
を指定することができます。複数のexpr
を直接連結したい場合は、concat や concat_ws を使用してフォーマットを指定してください。- ORDER BY の項目は、1から始まる符号なし整数、列名、または通常の式を指定できます。結果はデフォルトで昇順にソートされます。ASC キーワードを明示的に指定することもできます。降順にソートしたい場合は、ソートする列名に DESC キーワードを追加してください。
sep
: 異なる行の非NULL値を連結するために使用されるオプションのセパレータです。指定しない場合、デフォルトで,
(カンマ)が使用されます。セパレータを排除するには、空の文字列''
を指定してください。
注意
v3.0.6およびv3.1.3以降では、セパレータを指定する際の動作が変更されました。セパレータを宣言するには
SEPARATOR
を使用する必要があります。例えば、select group_concat(name SEPARATOR '-') as res from ss;
のようにします。
戻り値
各グループに対して文字列値を返し、非NULL値がない場合は NULL を返します。
group_concat が返す文字列の長さを制限するには、セッション変数 group_concat_max_len
を設定します。デフォルトは1024です。最小値: 4。単位: 文字。
例:
SET [GLOBAL | SESSION] group_concat_max_len = <value>;
例
-
ss
という科目のスコアを含むテーブルを作成します。CREATE TABLE `ss` (
`id` int(11) NULL COMMENT "",
`name` varchar(255) NULL COMMENT "",
`subject` varchar(255) NULL COMMENT "",
`score` int(11) NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 4
PROPERTIES (
"replication_num" = "1"
);
insert into ss values (1,"Tom","English",90);
insert into ss values (1,"Tom","Math",80);
insert into ss values (2,"Tom","English",NULL);
insert into ss values (2,"Tom",NULL,NULL);
insert into ss values (3,"May",NULL,NULL);
insert into ss values (3,"Ti","English",98);
insert into ss values (4,NULL,NULL,NULL);
insert into ss values (NULL,"Ti","Phy",98);
select * from ss order by id;
+------+------+---------+-------+
| id | name | subject | score |
+------+------+---------+-------+
| NULL | Ti | Phy | 98 |
| 1 | Tom | English | 90 |
| 1 | Tom | Math | 80 |
| 2 | Tom | English | NULL |
| 2 | Tom | NULL | NULL |
| 3 | May | NULL | NULL |
| 3 | Ti | English | 98 |
| 4 | NULL | NULL | NULL |
+------+------+---------+-------+ -
group_concat を使用します。
例1: デフォルトのセパレータで名前を文字列に連結し、NULL値は無視されます。重複する名前は保持されます。
select group_concat(name) as res from ss;
+---------------------------+
| res |
+---------------------------+
| Tom,Tom,Ti,Tom,Tom,May,Ti |
+---------------------------+
例2: セパレータ -
で名前を文字列に連結し、NULL値は無視されます。重複する名前は保持されます。
select group_concat(name SEPARATOR '-') as res from ss;
+---------------------------+
| res |
+---------------------------+
| Ti-May-Ti-Tom-Tom-Tom-Tom |
+---------------------------+