我有以下情况:
表:用户: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。
答案 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