Моя упрощена схема является:запрос, чтобы получить подсчитывать элемент для группы с общей суммы баллов для каждой группы
- Участники (
Id
,Email
) - команды (
Id
,Name
) - TeamMembers многие к -many mapping для команд - участников (
TeamId
,ParticipantId
) - Ответы (
Id
,ParticipantId
) - ReponseDetails (
Id
,ResponseId
,Points
,BonusPoints
)
Для каждой команды, которая имеет по крайней мере 2 членов, которые я хочу получить TeamID, Total Member Count и Тотал очки команды. Total Team Points - это сумма бонусных очков и очков от ResponseDetails от всех членов команды. Обратите внимание, что Участник может быть членом более чем одной команды.
До сих пор у меня есть этот запрос:
select
tm.[TeamId],
count(tm.[ParticipantId]) as 'TotalMemberCount',
sum(rd.[Points] + rd.[BonusPoints]) as 'TotalTeamPoints'
from
[TeamMembers] tm
left outer join
[Responses] r on r.[ParticipantId] = tm.[ParticipantId]
left outer join
[ResponseDetails] rd on r.[Id] = rd.[ResponseId]
where
tm.[TeamId] in (select [TeamId] from [TeamMembers]
group by [TeamId] having count([ParticipantId]) > 1)
group by
tm.[TeamId]
Он возвращает правильный TeamId
и TotalTeamPoints
, но неверная TotalMemberCount
(гораздо больше). У меня такое чувство, что я пропустил что-то простое, как группировка.