计算LEFT JOIN中的行,其中列为value

时间:2014-04-16 13:36:35

标签: sql join count left-join

我有团队,用户和积分表。

当我打电话从数据库中获取团队时,我还需要将点数计算为生成列,并将该团队中的用户数量计算为新列。

到目前为止我有这个,但它会返回成员计数列中的所有用户,而不仅仅是该团队中的成员。

SELECT   ar_teams.*, COALESCE(SUM(ar_points.amount),0) AS points, COUNT(ar_users.team_id) AS members
    FROM     ar_teams
        LEFT JOIN ar_users  ON ar_users.team_id  = ar_teams.id
        LEFT JOIN ar_points ON ar_points.user_id = ar_users.id
    WHERE ar_teams.id = 1 AND ar_users.team_id = 1
    GROUP BY ar_teams.id

我得到的结果:

id    name           name_alt    points    members
1     UK & Ireland   NULL        3076      48

成员数量应为12,目前它似乎在计算所有人,而不考虑他们的团队。

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题是使用count()而不是count(distinct)。我想这就是你想要的:

SELECT ar_teams.*,
       COALESCE(SUM(ar_points.amount), 0) AS points,
       COUNT(distinct ar_users.id) AS members