Выберите, сгруппируйте и суммируйте результаты базы данных

Так же, как к вашему сведению... Вложенные транзакции могут быть опасными. Это просто увеличивает возможности получения мертвой блокировки. Так, хотя это хорошо и необходимо, способ, которым это реализовано, важен в более высокой ситуации с объемом.

5
задан ThoKra 12 October 2009 в 23:45
поделиться

3 ответа

Исправлено с помощью: select при получении запроса, ввод выборок вручную

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s,
                  :select => "created_at, SUM(time) time",
                  :group => "strftime('%m', created_at)",
                  :order => 'created_at DESC')
1
ответ дан 15 December 2019 в 01:06
поделиться

Для этого можно использовать вычисления активной записи . Некоторый пример кода может быть

Model.sum(:column_name, :group => 'MONTH("created_at")')

. Очевидно, с оговоркой, что МЕСЯЦ зависит от MySQL, поэтому, если вы разрабатываете базу данных SQLite, это не сработает.

2
ответ дан 15 December 2019 в 01:06
поделиться

Я не знаю, есть ли SQL-запрос, который вы используете для этого (без изменения текущей структуры таблицы). Однако вы делаете это с помощью нескольких строк кода.

records = Tasks.find(:conditions => {..})
month_groups = records.group_by{|r| r.created_at.month}
month_groups.each do |month, records|
  sum stuff.. blah blah blah..
end

Я видел эту ссылку справа от этого вопроса. Я предполагаю, что другие базы данных, помимо MySQL, имеют аналогичные функции.

mysql select sum group by date

1
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: