我正在寻找或帮助在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)
感谢您的帮助和建议。