在MySQL中将一组行聚合为单个结果

时间:2018-10-31 17:50:52

标签: mysql

我正在将架构从Postgres转换为MySQL,并陷入明显缺乏内置功能来聚合由(子)查询返回的结果集的困境,例如到Postgres的string_agg()。具体来说,假设表t具有3行:

COL
"x"
"y"
"z"

在Postgres中,SELECT string_agg(col, ',') FROM t将返回一行结果,其中所有COL值都与指定的分隔符(即字符串x,y,z)连接在一起。如何在MySQL中完成此操作?

1 个答案:

答案 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             |

View on DB Fiddle