鉴于以下模型:
class Vote < ActiveRecord::Base
attr_accessible :user_id, :vote_for_id, :voting_category_id, ,:points_earned
belongs_to :user
belongs_to :vote_for
belongs_to :voting_category
我想知道如何查询PostgreSQL数据库,它返回一个排行榜。 换句话说,每个用户的points_earned总和,从头到尾排序?
到目前为止,我有:
Votes.sum(:points_earned).group(:user_id, :id).order(:points_earned)
提前致谢
答案 0 :(得分:6)
这应该会返回一个按降序获得最多积分的前20名用户列表
Vote.
joins(:user).
select('*, sum(points_earned) as total').
group('user_id').
order('total DESC').
limit(20)
答案 1 :(得分:2)
<强>解强>
以下查询适用于mysql和postgres。
Vote. joins(:user).
select('users.*, sum(points_earned) as total').
group('user_id').
order('total DESC').
limit(20)