如何连接 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
我有以下情况:
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