2012-11-17 27 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