mysql按大多数选票排序

时间:2013-02-01 12:10:04

标签: mysql ruby-on-rails

我有问题排序加入了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或任何其他整数)。

4 个答案:

答案 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')

将给出相同的结果。如果需要,您可以将DESCASC附加到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