4

给定以下模型:

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 数据库。换句话说,每个用户的积分总和,从第一个到最后排序?

到目前为止,我有:

Votes.sum(:points_earned).group(:user_id, :id).order(:points_earned)

提前致谢

4

2 回答 2

6

这应该会返回给您的前 20 名用户的列表,该列表按降序排列获得的积分最多

Vote.
  joins(:user).
  select('*, sum(points_earned) as total').
  group('user_id').
  order('total DESC').
  limit(20)
于 2013-07-31T00:49:08.857 回答
2

解决方案

以下查询适用于 mysql 和 postgress。

Vote.         joins(:user).
              select('users.*, sum(points_earned) as total').
              group('user_id').
              order('total DESC').
              limit(20)
于 2013-07-31T23:05:42.307 回答