我有团队,用户和积分表。
当我打电话从数据库中获取团队时,我还需要将点数计算为生成列,并将该团队中的用户数量计算为新列。
到目前为止我有这个,但它会返回成员计数列中的所有用户,而不仅仅是该团队中的成员。
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,目前它似乎在计算所有人,而不考虑他们的团队。
答案 0 :(得分:0)
我怀疑您的问题是使用count()
而不是count(distinct)
。我想这就是你想要的:
SELECT ar_teams.*,
COALESCE(SUM(ar_points.amount), 0) AS points,
COUNT(distinct ar_users.id) AS members