2016-01-06 50 views
0

我試圖得到一個表格,將所有從查詢得到的值,我對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的問題正在將其轉化爲導軌。我做了這樣的事情:

@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]) 

和我的看法與和方法檢索值:

<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| %>但沒有工作也試過兩種。

這裏的任何想法?

提前致謝!

回答

0

您的導軌解決方案不符合標準;試試這個得到一個領域的快速求和:

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

這需要每一個和聲明。這應該讓你擺脫這個漏洞!然後,優化; (select sum(bmx) AS sum_bmx, sum(yy) AS sum_yy)和@result ['sum_bmx']

另外,子選擇不能很好地優化;遠離它們,只需在單獨的查詢中預先計算該數字即可。

有意義嗎?

+0

這僅適用於帶有條件,但如何添加的created_at?和?條件?謝謝! @ court3nay –

+0

您可以使用'..'操作員添加更多'where'條件 - 在activerecord上閱讀!這是以前的答案; http://stackoverflow.com/questions/2381718/rails-activerecord-date-between之間 – court3nay

+0

你可以鏈接那些'在一起或把兩個條件在那裏,(usario_id:1,created_at:[1.month.ago .. 1.day.ago]) – court3nay

0

你可以這樣說:

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

然後

@er.sum_bmx 

+0

這給了我一個零值,就像從find_by_sql查詢@dsounded –

+0

@HéctorMonárrez運行它,因爲它不會拋出一個錯誤,表中真正包含這些行,如果返回值爲零,可能是您試圖總結數值?在這種情況下,你應該使用count而不是sum – dsounded