查询以获取组的成员计数以及每个组的总点数

时间:2013-12-04 15:31:10

标签: sql-server tsql

我的简化架构是:

  • 参与者(IdEmail
  • 小组(IdName
  • 团队成员为团队的多对多映射 - 参与者(TeamIdParticipantId
  • 回复(IdParticipantId
  • ReponseDetails(IdResponseIdPointsBonusPoints

对于每个至少有2名成员的团队,我想获得TeamId,总会员数和总团队积分。团队总分数是来自所有团队成员的ResponseDetails的BonusPoints和Points的总和。请注意,参与者可以是多个团队的成员。

到目前为止,我有这个问题:

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]

它返回正确的TeamIdTotalTeamPoints但不正确TotalMemberCount(更高)。我有一种感觉,我错过了一些简单的事情,比如在某个地方进行分组。

1 个答案:

答案 0 :(得分:0)

我怀疑左外连接导致了一些重复,这些重复被计入“count(tm。[ParticipantId])”。尝试“计数(不同的tm。[ParticipantId])”。