2016-01-06 3 views
0

Я пытаюсь получить таблицу, которая добавляет все значения нечестных из запроса моего запрос на SQL выглядит следующим образом:Multiple метода суммы в одном запросе рельсы

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) %>

Это потребует одно заявление за суммы. Это должно вывести тебя из этой дыры! Затем оптимизируйте; чтобы получить несколько сумм, лучше всего использовать AS (select sum(bmx) AS sum_bmx, sum(yy) AS sum_yy) и делать @result ['sum_bmx']

Кроме того, подвыборки не оптимизируются хорошо; держитесь подальше от них, просто предварительно вычислите это число в отдельном запросе.

Имеют смысл?

+0

это работает только с этим условием, но как я добавляю created_at между ними? а также ? состояние? Благодаря! @ court3nay –

+0

Вы можете добавить дополнительные условия «где» с оператором '..' - читать на 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 вместо суммы – dsounded

Смежные вопросы