我試圖在查詢中保存一些寶貴的毫秒。Activerecord,計算多個值的分組值的平均百分比
我有一個統計表格,我計算的一個關鍵
Activity.group(:company_id).average(:completed_courses)
一切都OK組合的一些記錄的平均值,但我還需要在同一個表的其他列的平均值(:readed_news, :logins, etc
)
有沒有辦法讓所有單個查詢的平均值?
我使用Postgres的
我試圖在查詢中保存一些寶貴的毫秒。Activerecord,計算多個值的分組值的平均百分比
我有一個統計表格,我計算的一個關鍵
Activity.group(:company_id).average(:completed_courses)
一切都OK組合的一些記錄的平均值,但我還需要在同一個表的其他列的平均值(:readed_news, :logins, etc
)
有沒有辦法讓所有單個查詢的平均值?
我使用Postgres的
您可以在average
方法採用單場,但你可以做到這一點
activities = Activity.group(:company_id)
completed_courses = activities.average(:completed_courses)
readed_news = activities.average(:readed_news)
etc..
希望這會幫助你。
你試過了嗎? 'activities = Activity.group(:company_id)' 它不會工作,因爲它不是一個關係。 –
你可以寫select。
Activity.group(:company_id)
.select('AVG(completed_courses) as avg_completed_courses,
AVG(readed_news) as avg_readed_news,
AVG(logins) as avg_logins')
此外,您可以編寫方法產生選擇表達:
def select_exp(attrs)
attrs.sum { |attr| ("AVG(#{attr}) as avg_#{attr},") }.chop
end
Activity.group(:company_id)
.select select_exp(%w(completed_courses readed_news logins))
使用範圍或類方法對你的模型:
class Activity < ActiveRecord::Base
self.average_company
group(:company_id).average(:completed_courses)
end
self.average_readed_news
group(:readed_news).average(:completed_courses)
end
end
然後調用:
Activity.average_company
Actvitity.average_readed_news
然後你可以嘗試合併sco PES
Activity.average_company.merge(Activity.average_readed_news)
請查看文檔在這裏: http://guides.rubyonrails.org/active_record_querying.html
不能你只取你需要的數據,並把它放在一個哈希事後做計算? – mahatmanich
這是一個巨大的表格,有記錄日誌... –
嘗試在你的模型上使用範圍或類方法! – mahatmanich