Ruby on rails 如何通过ActiveRecord获得最近n个项目的平均值
有一家Ruby on rails 如何通过ActiveRecord获得最近n个项目的平均值,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,有一家公司有许多日常数据每日数据有日期和卷列 class Company < ActiveRecord::Base has_many :daily_data end 我认为如果我使用PostgresqlAVG函数会更有效。但不知何故,order就这样被忽略了 company.daily_data.order(date: :desc).limit(10).average(:volume) (15.7ms) SELECT AVG("daily_data"."volume") F
公司
有许多日常数据
<代码>每日数据有日期
和卷
列
class Company < ActiveRecord::Base
has_many :daily_data
end
我认为如果我使用Postgresql
AVG
函数会更有效。但不知何故,order
就这样被忽略了
company.daily_data.order(date: :desc).limit(10).average(:volume)
(15.7ms) SELECT AVG("daily_data"."volume") FROM "daily_data" WHERE "daily_data"."company_id" = $1 LIMIT 10 [["company_id", 1123]]
我可以同时使用
限制
、订单
、平均值
吗?对于这样的查询,您需要使用子查询
select avg(volume) from
(select volume from daily_data where company_id = 1 limit 10) as temp
在Rails中执行此操作可能包括
findbysql
方法。但是,我认为您不会注意到这对性能的任何好处,因为您只计算了10条记录。无论您是否按日期订购,因为它始终是1行。按id订购描述随着记录数量的增加,它是一个更有效的索引。谢谢,当我需要计算更多的记录时,我将使用find\u by\u sql
。
select avg(volume) from
(select volume from daily_data where company_id = 1 limit 10) as temp