一个查询中的多个求和方法

时间:2016-01-06 22:00:53

标签: ruby-on-rails ruby

我正在尝试获取一个表,该表添加了查询中获取的所有值,我的查询在sql上如下所示:

SELECT sum(bmx), sum(amex), sum(bbjio), sum(bancomer), sum(santander), sum(pesos), sum(dolares), sum(gastos),sum(venta_tot) 
FROM avm.avs
WHERE usuario_id = 2;

这完全适用于mysql,问题是将其转换为rails。我做了这样的事情:

@er = Av.find_by_sql(["SELECT * FROM avm.avs where created_at between ? and ? and usuario_id in(select id from avm.usuarios where tienda = ?)",@startd, @endd, @nom])

并在我的视图中使用sum方法检索值:

<h2>Bancos</h2><hr>
        <h4>Banamex</h4><%= @er.sum(:bmx) %>
        <h4>BanBajio</h4><%= @er.sum(:bbjio) %>
        <h4>Santander</h4><%= @er.sum(:santander) %>

还尝试使用循环<% @er.each do |t| %>,但也没有用。

这里有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您的导轨解决方案不合适;试试这个以获得一个字段的快速总和:

<%= Av.where(usario_id: 1).sum(:bmx) %>

这需要每笔款项一份。这应该让你走出这个洞!然后,优化;要获得多个总和,最好使用AS(select sum(bmx) AS sum_bmx, sum(yy) AS sum_yy)并执行@result [&#39; sum_bmx&#39;]

此外,子选择不能很好地优化;远离它们,只需在单独的查询中预先计算该数字。

有意义吗?

答案 1 :(得分:0)

你可以这样:

   @er = Av.select('sum(bmx) as sum_bmx, sum(bbjoi) as sum_bbjoi) ...').first

然后

   @er.sum_bmx