1

我在排序连接的 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

总而言之,亚历克斯有 1 票得分约翰有 3。因此约翰将是第一,亚历克斯第二。

如何获取按投票表上“投票”字段的总和排序的用户列表?“投票”字段是整数(可以是 1、-1、0 或任何其他整数)。

4

4 回答 4

2

您可以使用这个使用 GROUP BY 和聚合函数 SUM 的 MySql 查询:

SELECT name
FROM users inner join votes
     ON users.id = votes.user_id
GROUP BY users.id
ORDER BY SUM(vote) DESC

在这里看到它。

于 2013-02-01T12:14:16.173 回答
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
于 2013-02-01T12:30:53.193 回答
1

尝试

User.joins(:votes).sum('votes.vote', group: 'votes.user_id', order: 'sum_votes_vote')

sum_votes_vote来自 Rails 给 sum 的别名。你也可以使用

User.joins(:votes).sum(:vote, group: 'votes.user_id', order: 'sum_vote')

这将给出相同的结果。如果需要,您可以附加DESC或附加ASC到。sum_vote

于 2013-02-01T14:06:26.453 回答
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
于 2013-02-01T12:16:20.167 回答