我正在将架构从Postgres转换为MySQL,并陷入明显缺乏内置功能来聚合由(子)查询返回的结果集的困境,例如到Postgres的string_agg()。具体来说,假设表t
具有3行:
COL
"x"
"y"
"z"
在Postgres中,SELECT string_agg(col, ',') FROM t
将返回一行结果,其中所有COL
值都与指定的分隔符(即字符串x,y,z
)连接在一起。如何在MySQL中完成此操作?
答案 0 :(得分:2)
使用Group_Concat()
连接由定界符字符串分隔的不同行值(默认为逗号(,
)
SELECT GROUP_CONCAT(col)
FROM t
扩展版本可以是:
SELECT GROUP_CONCAT(DISTINCT col
ORDER BY col ASC
SEPARATOR ';')
FROM t
以上将仅选择col
的唯一值,并用分号分隔符(;
,而不是逗号)进行连接,并且col
值将按升序排列。
模式(MySQL v5.7)
create table t (col varchar(2));
insert into t values('x'),('y'),('z');
查询#1
SELECT GROUP_CONCAT(col) FROM t;
| GROUP_CONCAT(col) |
| ----------------- |
| x,y,z |