如何在ActiveRecord的SUM中添加范围?

问题描述 投票:1回答:1

我想返回按当前季节的mountain_routes.hearts_count排序的用户。

我已经为此编写了一种方法,但是我的问题是该用户所有mountain_routes的总和,我只想按给定range中用户mountain_routes的总和]进行排序。

def best_of_season
  range = start_date..end_date
  ::Db::User
    .joins(:mountain_routes)
    .where(mountain_routes: { route_type: 'regular_climbing', created_at: range })
    .select('users.id, SUM(mountain_routes.hearts_count)')
    .group('users.id')
    .distinct
    .order('SUM(mountain_routes.hearts_count) DESC')
end

所以问题出在这部分SUM(mountain_routes.hearts_count)。如何仅在给定的range中放置山区路线?

我想收到这样的输出:

NAME   | HEARTS in this season
Thomas | 5
Dave   | 3
Erick  | 1

我想返回按当前季节的mountain_routes.hearts_count排序的用户。我已经为此写了一个方法,但是我的问题是用户的所有mountain_routes都求和了,我想...

sql ruby-on-rails ruby postgresql activerecord
1个回答
0
投票

您可以使用向SUM(mountain_routes.hearts_count)添加别名并按order by子句使用它:

© www.soinside.com 2019 - 2024. All rights reserved.