我有两个表,一个是带有类别标记的名称表,另一个是每个名称的分数表
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
这可以用一个查询吗?
我可以通过总和查询获得总数并按类别分组,但无法按照我的意愿查看获取名称的方法。
非常感谢
答案 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的答案:))