如何连接 3 个表并从单个连接的结果中获取总和?

How to join 3 tables and get sum from result of individual joins?


我有以下情况:
Table:用户:user_id,用户名,...
Table: 登录: user_id, login_date, ...
Table::user_id,点,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

它returns算作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

它returns总和为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

它returns算作72(36 * 2),求和为800(400 * 2)。 两次,因为存在多个用户 ID。
我尝试了几种方法,例如与 distincts 结合使用,但似乎没有任何效果。请帮忙。
如果可以单独连接就更好了。提前致谢。我正在使用 mysql 和 Php。

您可以对子查询中的点求和,select 计数中的不同登录

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

您应该可以通过加入您的登录名来进行计数 table,然后包括一个子查询来计算您的点数:

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