2011-02-09 4 views
4

У меня есть две таблицы, одна таблица имен с категорией тегом и другой таблица баллов для каждого имениполучать отдельные записи из группы по

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

Вам нужно 'group_concat' –

ответ

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 
+0

Это отлично, спасибо большое за ваш ответ. – Dave

+0

Я попытался добавить заказ в конце sql, и теперь имя просто возвращает «BLOB». Вот sql, любая идея, почему это не удается теперь, когда у меня есть заказ, включенный. Благодарю. SELECT group_concat (DISTINCT 'tblnames'.'name', '',' tblnames'.'surname' SEPARATOR 'и') AS 'nameOfPair', Sum ('tblpersonscores'''score') AS 'totalScore' FROM' tblnames' Inner Join 'tblpersonscores' ON' tblpersonscores'.'personID' = 'tblnames''''' ГРУППА BY' tblnames'''''' ЗАКАЗАТЬ 'totalScore' ASC – Dave

+0

Это не так красиво видеть, но если вы попробуете: выберите * from (SELECT group_concat (DISTINCT tblnames.name, '', tblnames.surname SEPARATOR 'и') AS 'nameOfPair', Sum (tblpersonscores.score) AS 'totalScore' FROM tblnames Inner Join tblpersonscores ON tblpersonscores.personID = tblnames. id GROUP BY tblnames.category) как заказ от TotalScore ASC «Что вы получаете? – Lordalcol

1

Просто добавьте group_concat(Name) as names в запросе сумму.

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, но, тем не менее кто-то Google его, но нуждается в ответ для Postgres :))

Смежные вопросы