从相关表中选择行计数而不进行子选择

时间:2013-08-28 22:12:49

标签: mysql sql join count subquery

我正在尝试编写一个SQL查询,为每个用户返回一行。该行必须包含分配给该用户的学校的数量以及分配给该用户的所有学校的分数总和。

表:

users (id, email)
schools (id, user_id, points (int))

usersschools的关系是一对多的。

我已经走到这一步了:

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错了。它返回用户行数,而不是指定的学校行数。

我该如何计算?

1 个答案:

答案 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

sqlfiddle