如何通过ActiveRecord获取最近的n项平均值

时间:2017-04-07 12:12:45

标签: ruby-on-rails postgresql

有一个export const fetchPageNum = () => { return (dispatch, getState) => { ... dispatch(requestBegin()) return fetch(url).then((response) => { return response.json() }).then((json) => { dispatch(pageNumSuccess(page_num)) dispatch(listAppend(json)) dispatch(requestEnd()) }).catch((error) => { dispatch(requestEnd()) }) } } 有很多add_action('admin_menu', 'remove_menu_items'); function remove_menu_items() { remove_submenu_page('edit.php','edit-tags.php?taxonomy=post_tag'); }CompanyDailyDatumDailyDatum列。

date

我希望得到最近10 volume的平均值。通过这段代码我得到了平均值。(我实现了class Company < ActiveRecord::Base has_many :daily_data end 方法)

volumes

如果我使用Array#mean company = Company.first company.daily_data.order(date: :desc).limit(10).pluck(:volume).mean 函数,我觉得效率更高。但不知何故,Postgresql会被忽略。

AVG

我可以同时使用ordercompany.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吗?

1 个答案:

答案 0 :(得分:0)

您需要对类似

的查询使用子查询
select avg(volume) from
  (select volume from daily_data where company_id = 1 limit 10) as temp

在Rails中执行此操作可能包括find_by_sql方法。但是我不认为你会发现任何性能上的好处,因为你只计算10条记录。