Ruby On Rails用sum和group查询?

时间:2013-07-30 21:27:05

标签: ruby-on-rails ruby

鉴于以下模型:

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)

提前致谢

2 个答案:

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