2012-11-17 32 views
1

考虑下面的模式:在SQL中通过`group by`聚合字符串?

create table A 
(
    id int primary id 
) 

create table B 
(
    a_id int, 
    s varchar(255) 
) 

然后以下查询:

select A.id, sum(1), ??? concat_join(B.s) ??? 
from A left join B on A.id = B.a_id group by A.id 

有A和B之间的1对多的关系,所以多行会被分组到一个。 “concat_join”的期望行为将针对组中的每个B.s将它们连接成单个字符串(可能与空间分隔符)。

有没有办法表达这是MySQL 5.5?

回答

4

使用GROUP_CONCAT

select A.id, sum(1), GROUP_CONCAT(B.s) 
from A left join B on A.id = B.a_id 
group by A.id 

默认情况下,字符串是由逗号分离。如果你想改变它,添加SEPARATOR关键字,

select A.id, sum(1), GROUP_CONCAT(B.s SEPARATOR ';') 
from A left join B on A.id = B.a_id 
group by A.id