如何加入3个表并从各个连接的结果中获得总和?

时间:2015-03-19 13:31:04

标签: mysql sql join sum


我有以下情况:
表:用户:user_id,username,...
表:登录:user_id,login_date,...
表::user_id,points,point_time
联接将基于users.user_id与其他表。
现在,我想了解所有登录以及用户获得的所有积分的总和 现在,当我这样做时:

select users.user_id,count(*) from users
inner join login on users.user_id=login.user_id
group by users.user_id

它将计数返回为36(例如)。 每当我跑:

select users.user_id,count(*),sum(points) from users
inner join point on users.user_id=point.user_id
group by users.user_id

它将sum返回为400(例如)并计为2。

但如果我将两个查询结合起来:

select users.user_id,count(*),sum(points) from users
inner join login on users.user_id=login.user_id
inner join point on users.user_id=point.user_id
group by users.user_id

将计数返回为72(36 * 2),总和为800(400 * 2)。 由于存在多个userId,因此两次 我试过几件事情,比如与区别相结合,但似乎没什么用。请帮助。
如果单独加入可能会更好。提前致谢。我正在使用mysp与Php。

2 个答案:

答案 0 :(得分:2)

您可以对子查询中的点求和,并在计数中选择不同的登录

select users.user_id,l.login,p.points from users
inner join (select user_id, count(1) login from login
       group by login) as l on users.user_id=login.user_id
inner join (select user_id, sum(point) as point 
        from point group by user_id ) as p on users.user_id=point.user_id

答案 1 :(得分:1)

您应该可以通过加入登录表然后包含子查询来计算积分来计算:

select users.user_id, count(*) as login_count,
  (select sum(points) from point 
   where point.user_id = users.user_id) as points_sum 
from users
inner join login on users.user_id=login.user_id
group by users.user_id