MySQL:对列上的元素进行分组和展平

时间:2014-01-28 10:19:11

标签: mysql sql select group-by group-concat

如果我有观点:

Movie             Genre    Actor
-------------------------------------------
Ocean's Twelve    Crime    George Clooney
Ocean's Twelve    Crime    Julia Roberts
Ocean's Twelve    Crime    Brad Pitt
Forrest Gump      Drama    Tom Hanks

我如何按照电影标题进行分组,但如下所示展平其他列:

Movie             Genre    Actor
-------------------------------------------
Ocean's Twelve    Crime    George Clooney, Julia Roberts, Brad Pitt
Forrest Gump      Drama    Tom Hanks

请注意,如果元素是等效的,则不会重复(例如Crime

3 个答案:

答案 0 :(得分:3)

<强>的MySQL

使用GROUP_CONCAT()功能:

SELECT movie, Genre, GROUP_CONCAT(Actor) AS Actor
FROM tableA
GROUP BY movie, Genre

SQL SERVER

SELECT A.movie, A.Genre, MAX(STUFF(B.ActorNames, 1, 1, '')) AS Actor
FROM tableA A 
CROSS APPLY(SELECT ' ' + Actor + ',' FROM tableA B 
            WHERE A.movie = B.movie AND A.Genre = B.Genre 
            FOR XML PATH('')
          ) AS B (ActorNames)
GROUP BY A.movie, A.Genre

答案 1 :(得分:2)

您正在寻找GROUP_CONCAT

select Movie, Genre, group_concat(Actor separator ', ') as `Actors`
from
movies
group by Movie, Genre;

答案 2 :(得分:1)

您需要group_concat并按http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat分组 试试这个

select Movie, Genre, group_concat(Actor) from view_name group by Movie