2013-07-30 149 views
4

考慮以下模型:Ruby On Rails使用sum和group進行查詢?

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

這是什麼給你? – rogerdpack

回答

2

解決方案

以下查詢適用於mysql和postgress。

Vote.   joins(:user). 
       select('users.*, sum(points_earned) as total'). 
       group('user_id'). 
       order('total DESC'). 
       limit(20) 
6

這應該返還給您前20的用戶列表具有最points_earned降序排列

Vote. 
    joins(:user). 
    select('*, sum(points_earned) as total'). 
    group('user_id'). 
    order('total DESC'). 
    limit(20)