MySQL按不同表中的多列求和排序

MySQL按不同表中的多列求和排序,mysql,sql,Mysql,Sql,我有三张桌子: 使用者 喜欢 交易 我需要获得每个用户的like.like和transaction.transaction的总和,然后根据结果对其进行排序 我能够为用户和喜欢的人做这件事: select users.*, sum(likes.like) as points from `users` inner join `likes` on `likes`.`user_id` = `users`.`id` group by `users`.`id` order by points desc 然

我有三张桌子:

使用者 喜欢 交易 我需要获得每个用户的like.like和transaction.transaction的总和,然后根据结果对其进行排序

我能够为用户和喜欢的人做这件事:

select users.*, sum(likes.like) as points
from `users`
inner join `likes` on `likes`.`user_id` = `users`.`id`
group by `users`.`id`
order by points desc
然后我添加了如下事务表:

select users.*, (sum(likes.like)+sum(transactions.`transaction`)) as points
from `users`
inner join `likes` on `likes`.`user_id` = `users`.`id`
inner join `transactions` on `transactions`.`user_id` = `users`.`id`
group by `users`.`id`
order by points desc
这是错误的结果

我希望看到:

| id | name  | points |
|----|-------|--------|
| 3  | Three | 12     |
| 1  | One   | 7      |
| 2  | Two   | 5      |
但是,请记住:

| id | name  | points |
|----|-------|--------|
| 3  | Three | 12     |
| 1  | One   | 6      |
| 2  | Two   | 5      |
那么,如何按喜欢和交易对用户进行排序呢


谢谢大家!

由于
事务
喜欢
之间没有1对1的关系,我认为您需要使用子查询:

select users.*,
    (select sum(points) from likes where user_id = users.id) as points,
    (select sum(transaction) from transactions where user_id = users.id) as transactions
from users
order by points desc
在对要求进行更多解释后更新了

select users.*,
    (select sum(points) from likes where user_id = users.id) +
    (select sum(transaction) from transactions where user_id = users.id) as points
from users
order by points desc

请加上你得到的结果和期望的结果。我不明白喜欢的表格。你们能解释一下它的作用吗?比如说,用户喜欢这个页面的次数有多少次是错误的。在你的结果1中,有8分,但必须是7(喜欢的3+8,喜欢的-1),所以你只需要把这两个加在一起。我将更新示例。我猜你的意思是喜欢的3+5…看起来像是工作,谢谢!对性能有什么建议吗?您应该在
用户id
列中为
交易
喜欢
| id | name  | points |
|----|-------|--------|
| 3  | Three | 12     |
| 1  | One   | 6      |
| 2  | Two   | 5      |
select users.*,
    (select sum(points) from likes where user_id = users.id) as points,
    (select sum(transaction) from transactions where user_id = users.id) as transactions
from users
order by points desc
select users.*,
    (select sum(points) from likes where user_id = users.id) +
    (select sum(transaction) from transactions where user_id = users.id) as points
from users
order by points desc