1

結合されたmysqlの結果の並べ替えに問題があり、2つの関連するテーブルがあります。

テーブルユーザー:

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位、アレックスが2位になります。

投票テーブルの「投票」フィールドの合計でユーザーリストを並べ替えるにはどうすればよいですか?「投票」フィールドは整数です(1、-1,0、またはその他の整数にすることができます)。

4

4 に答える 4

2

GROUPBYと集約関数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

試す

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

sum_votes_voteRailsが合計に与えるエイリアスから来ました。使用することもできます

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

同じ結果になります。DESC必要に応じて、またはASCに追加できますsum_vote

于 2013-02-01T14:06:26.453 に答える
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 に答える
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 に答える