我有问题排序加入了mysql结果,有两个相关的表:
表用户:
id, name
--------
1, Alex
2, John
表票:
user_id, vote
-------------
1, 1
1, 1
1, 1
1, -1
1, -1
2, 1
2, 1
2, 1
Alex总结得1票 约翰有3个。 因此,约翰将成为第一,亚历克斯第二。
如何通过投票表上的“投票”字段的总和获得用户列表? “vote”字段是整数(可以是1,-1,0或任何其他整数)。
答案 0 :(得分:2)
您可以使用此使用GROUP BY的MySql查询和聚合函数SUM:
SELECT name
FROM users inner join votes
ON users.id = votes.user_id
GROUP BY users.id
ORDER BY SUM(vote) DESC
见here。
答案 1 :(得分:1)
select users.* from users
left join
(
select user_id,SUM(vote) as sum_vote
from votes
group by user_id
) as v on users.id=v.user_id
order by v.sum_vote
答案 2 :(得分:1)
尝试
User.joins(:votes).sum('votes.vote', group: 'votes.user_id', order: 'sum_votes_vote')
sum_votes_vote
来自Rails给予总和的别名。您也可以使用
User.joins(:votes).sum(:vote, group: 'votes.user_id', order: 'sum_vote')
将给出相同的结果。如果需要,您可以将DESC
或ASC
附加到sum_vote
。
答案 3 :(得分:0)
select u.name from users u inner join votes v on u.id=v.user_id group by u.id order by sum(vote) desc