我正在尝试编写一个SQL查询,为每个用户返回一行。该行必须包含分配给该用户的学校的数量以及分配给该用户的所有学校的分数总和。
表:
users (id, email)
schools (id, user_id, points (int))
users
与schools
的关系是一对多的。
我已经走到这一步了:
select u.id, u.email,
count(*) as total_schools,
sum(points) as total_points
from users u
left join schools s
on u.id = s.user_id
group by u.id
但这不太有用。 count(*) as total_school
错了。它返回用户行数,而不是指定的学校行数。
我该如何计算?
答案 0 :(得分:1)
在学校表中,id / user-id对是唯一的吗?如果不是这就是为什么你可能会返回用户为学校出现的次数。
尝试使用distinct而不是count()。虽然请注意,如果空值不在于计数(),则会省略空值。
select u.id, u.email,
count(distinct(s.id)) as total_schools,
sum(points) as total_points
from users u
left join schools s
on u.id = s.user_id
group by u.id