排行榜的活动记录或SQL查询(postgres排名和总和)

时间:2014-02-05 22:27:08

标签: ruby-on-rails postgresql activerecord rank

我正在寻找或帮助在Rails / Active Record(或使用Postgres的SQL)中为竞赛创建高级查询。

我有比赛表,用户表和活动表。比赛有很多用户(参与者),用户有很多活动。每个活动都有点,'trackable_type'和其他属性。

我想要的选择: - 来自users表的first_name - users表中的last_name - 每个用户的积分总和为total_contest_points - 将每个用户类型为“课程”的活动计为total_contest_courses - 返回的结果按total_contest_points和total_contest_courses

排名

我看了一下postgres_ext gem并尝试编写sql,但我似乎无法让排名发挥作用。这是我到目前为止所做的:

time_range = start_time..end_time
contestants = participants.joins(:activities).where('activities.created_at' => time_range).select("
  users.id,
  users.first_name,
  users.last_name,
  sum(activities.points) as total_contest_points,
  sum(
    case
    when
      activities.trackable_type='Course'
    then
      1
    else
      0
    end
  ) as total_contest_courses,
  rank() OVER (ORDER BY total_contest_points DESC) as contest_rank
").group('users.id').limit(limit)

感谢您的帮助和建议。

0 个答案:

没有答案