MySQL按不同表中的多列求和排序
我有三张桌子: 使用者 喜欢 交易 我需要获得每个用户的like.like和transaction.transaction的总和,然后根据结果对其进行排序 我能够为用户和喜欢的人做这件事: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 然
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