栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在MySQL或Rails中在特定日期范围内每天获取AVG的最佳方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在MySQL或Rails中在特定日期范围内每天获取AVG的最佳方法

是否有一个原因(除了已经提到的日期以外)为什么您不使用ActiveRecord中的内置组功能?您似乎担心“后处理”,我认为这并不是真正要担心的事情。

您正在使用Rails,因此您可能应该首先寻找Rails解决方案[1]。我的第一个想法是做类似的事情

Product.average(:sales_price, :group => "DATE(created_at)", :conditions => ["merchant_id=?", 1])

哪个ActiveRecord变成了您描述的SQL。假设

has_many
在商家和产品之间存在已声明的关联,那么使用它可能会更好,因此类似:

ave_prices = Merchant.find(1).products.average(:sales_price, :group => "DATE(created_at)")

(我希望您对模型的描述为“ products_sold”是一种转录错误,顺便说一句-如果不是,则您对类的命名有些不满!)

毕竟,您回到了起点,但是您以更传统的Rails方式到达了那里(Rails确实重视约定!)。现在我们需要填补空白。

我假设您知道您的日期范围,假设它被定义为从

from_date
到的所有日期
to_date

date_aves = (from_date..to_date).map{|dt| [dt, 0]}

这样就将日期的完整列表构建为一个数组。我们不需要平均日期:

ave_price_dates = ave_prices.collect{|ave_price| ave_price[0]} # build an array of datesdate_aves.delete_if { |dt| ave_price.dates.index(dt[0]) } # remove zero entries for dates retrieved from DBdate_aves.concat(ave_prices)     # add the query resultsdate_aves.sort_by{|ave| ave[0] } # sort by date

那很多东西对我来说显得有些混乱:我认为它可能更简洁更干净。我会研究构建一个Hash或Struct,而不是停留在数组中。


[1]我并不是说不使用SQL,而是在ActiveRecord无法生成最有效的查询而您又回过头来的情况下发生

find_by_sql
。很好,应该是这样,但是我认为您应该尝试仅将其用作最后的手段。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号