MySQL或Rails在特定日期范围内每天获得AVG的最佳方式
我正在尝试在Rails中制作图表,例如在给定日期范围内每天的平均销售额 假设我有一个product_sold模型,它具有“sales_price”浮点属性.但是如果特定日期没有销售(例如模型/ db中没有销售),我想简单地返回0. MySQL / Rails完成这项工作的最佳方法是什么?我知道我可以这样做: (这个SQL查询可能是完全错误的方式来获得我想要的东西)
得到这样的结果: | avg | date | 23 01-03-2009 50 01-05-2009 34 01-07-2009 ... ... 我想得到的是: | avg | date | 23 01-03-2009 0 01-04-2009 50 01-05-2009 0 01-06-2009 34 01-07-2009 0 01-08-2009 ... ... 我可以使用SQL执行此操作,还是必须对结果进行后处理以查找日期范围中的哪些日期不在SQL结果集中?也许我需要一些子选择或IF语句? 感谢大家的帮助. 最佳答案 是否有原因(除了已经提到的日期之外)为什么不使用ActiveRecord中的内置组功能?您似乎关注“后期处理”,我认为这并不值得担心.你在Rails中,所以你应该首先寻找一个Rails解决方案[1].我的第一个想法是做类似的事情
哪个ActiveRecord变成了你描述的SQL.假设Merchant和Product之间有一个声明的has_many关联,那么你可能会更好地使用它,所以类似于:
(我希望您对模型的描述为“products_sold”是某种转录错误,顺便说一下 – 如果没有,您的课程命名就会有点消息!) 毕竟,你回到了开始的地方,但是你以更传统的Rails方式到达那里(Rails真的很重视惯例!).现在我们需要填补空白. 我假设你知道你的日期范围,让我们说它被定义为从from_date到to_date的所有日期.
这会将完整的日期列表构建为数组.我们不需要得到平均值的日期:
这一批看起来有点混乱:我认为它可能更温和,更清洁.我正在研究构建一个Hash或Struct,而不是留在数组中. [1]我并不是说不使用SQL – 在ActiveRecord无法生成最有效查询的情况下会发生这种情况,并且您会依赖于find_by_sql.这很好,它应该是这样的,但我认为你应该尝试使用它作为最后的手段. (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |