DailyDatum
が多いCompany
があります。 DailyDatum
は、date
およびvolume
の列を有する。最近のn個のアイテムをActiveRecordで平均する方法
class Company < ActiveRecord::Base
has_many :daily_data
end
最近平均1volumes
を取得したいと考えています。このコードによって、私は
company = Company.first
company.daily_data.order(date: :desc).limit(10).pluck(:volume).mean
(私はArray#mean
メソッドを実装)。平均値を持って、私は私がPostgresql
AVG
機能を使用する場合、それはより多くのefficiantだと思いました。何とか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]]
私はlimit
、order
、average
は同時に使用することはできますか?あなたがRailsの中でこれを行うこと
select avg(volume) from
(select volume from daily_data where company_id = 1 limit 10) as temp
のようなクエリでサブクエリを使用する必要が
日付で注文するかどうかは関係ありません。常に1行になるためです。 –
idで降順でソートすると、レコード数が増えるほど効率的なインデックスになります。 – s1mpl3