从一组获取个人记录

时间:2011-02-09 14:00:33

标签: mysql

我有两个表,一个是带有类别标记的名称表,另一个是每个名称的分数表

ID    Name      Category
1     Dave      1
2     John      1
3     Lisa      2
4     Jim       2

,得分表是

PersonID      Score
1             50
2             100
3             75
4             50
4             75

然后我想要一个返回类似

的查询
Category    TotalScore    Names
1           150           Dave, John
2           200           Lisa, Jim

这可以用一个查询吗?

我可以通过总和查询获得总数并按类别分组,但无法按照我的意愿查看获取名称的方法。

非常感谢

3 个答案:

答案 0 :(得分:4)

您需要使用group_concat:

select Category, sum(Score) as TotalScore, group_concat(Name) as Names from categories
join scores on scores.category = categories.category
group by category

甚至更好:

group_concat(DISTINCT Name ORDER BY Name ASC SEPARATOR ',') as names

答案 1 :(得分:1)

只需将group_concat(Name) as names添加到您的总和查询中。

答案 2 :(得分:1)

这是一个适用于Postgres的解决方案(没有group_concat()函数):

select category, sum(score) as TotalScore, array(select id from perso where category=P.category order by id) as Names from perso P JOIN scores S ON S."PersonID" = P.id GROUP BY category;

(我知道这是一个MySQL问题,但是有人可能会谷歌但需要Postgres的答案:))