我有以下场景:
表:用户:用户id,用户名,。。。
表:登录:用户id,登录日期。。。
表:点:用户id,点,点时间
联接将基于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

它返回count为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(例如),count为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

它返回count为72(36*2)和sum为800(400*2)。
两次,因为有多个用户标识。
我试过几种方法,比如和扩张剂结合,但似乎没有效果。请帮忙。如果可以单独加入就更好了。提前谢谢。我在Php中使用mysql。

最佳答案

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

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

关于mysql - 如何联接3个表并从单个联接的结果中获取和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29145971/

10-15 18:24