【问题标题】:Rails 3 create and average multiple arraysRails 3 创建和平均多个数组
【发布时间】:2011-11-24 04:40:07
【问题描述】:

我有两个模型客户和报告。一个客户有_许多报告和一个报告属于_一个客户。客户具有 :specialty 属性(医生、牙医、律师),报告具有 :amount 属性。每个客户每年在日历季度生成 4 份报告。

我想要做的是能够对给定 :specialty 的条目的 :amounts 进行平均,例如律师。我可以从这个特殊的 :specialty 中得到一个包含这些值的大数组,如下所示:

Quarter.includes(:client).where('clients.specialty=?','Lawyer').map(&:amounts)%>

我想知道是否有一种方法可以使用 :specialty 为每个客户端打印一个数组,然后在另一个数组中平均它们。我是否在这里使用这样的循环:

<% Quarter.includes(:client).where('clients.specialty=?', 'Lawyer').each do |c| %>
<%= c.amount  %>
<% end %>

如果是这样,我如何将其分离出来,而不是仅仅一个巨大的数组,而是根据它所属的客户端将它们分开?

【问题讨论】:

    标签: arrays ruby-on-rails-3 for-loop average


    【解决方案1】:

    您可以使用group 方法。

    对于每个专业:

    Quarter.includes(:client).group('clients.specialty').average('quarters.amounts')
    

    这将返回一个OrderedHash,其中键是group 中指定的specialty 列,值是相应的平均金额

    对于每个客户:

    Quarter.includes(:client).group('clients.id').average('quarters.amounts')
    

    【讨论】:

    • 差不多了。这给了我整个累积数据集的平均值。我正在寻找输入数据的每个时间段的平均值。例如,一年中的每个日历季度每个客户都有一个 :amount 条目(每个客户每年 4 个)。假设有两个相同的客户:专业,我想要给定:季度和:年的平均:金额。我能想到让它工作的唯一方法是为每个时间段分配一个变量并以这种方式查询它,而不是检索所有记录。想法?
    • @FattRyan 在Quarter 中有year 列吗?如果是这样,我认为您可以在.group() 中指定多个列,例如.group('clients.specialty', 'quarters.year')
    • @FattRyan 但是如果你想在一行中同时拥有年平均值和季度平均值,你必须编写一个复杂的 sql 语句来检索它,或者查询两次并组合结果。
    • ShiningRay,向“.group()”函数添加更多功能完全符合我的要求。现在我只需要弄清楚如何只在数组中显示数字,因为输出如下所示: {"[\"Orthodontist\", 2010, 1]":"475000.0","[\"Orthodontist \", 2010, 2]":"484500.0","[\"Orthodontist\", 2010, 3]":"494190.0","]}。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2021-01-01
    • 2020-04-09
    相关资源
    最近更新 更多