Выбрать, сгруппировать и суммировать результаты из базы данных - PullRequest
5 голосов
/ 12 октября 2009

У меня есть база данных с некоторыми полями, которые я хотел бы суммировать. Но это не большая проблема, я хочу сгруппировать эти поля по месяцам их создания. ActiveRecord автоматически создал поле с именем «creation_at». Итак, мой вопрос; как сгруппировать результат по месяцам, а затем суммировать поля за каждый месяц?

Обновлено с кодом

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
                  :group => "strftime('%m', created_at)",
                  :order => 'created_at DESC')

Это код, который у меня есть сейчас. Мне удалось сгруппировать по месяцам, но мне не удалось сложить два моих поля: «Мин.

Ответы [ 3 ]

2 голосов
/ 12 октября 2009

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

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

Очевидно, что с оговоркой MONTH специфичен для mysql, поэтому, если вы разрабатываете базу данных SQLite, это не сработает.

1 голос
/ 13 октября 2009

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

@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 голос
/ 12 октября 2009

Я не знаю, есть ли 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 выбрать группу по дате

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...