· 7 years ago · Sep 02, 2018, 04:54 PM
1Multiple sum()s in ActiveRecord in Rails
2select user_id, sum(cost) as total_cost, sum(quantity) as total_quantity from line_items group by user_id
3
4LineItem.select(:user_id).group(:user_id).sum(:cost).sum(:quantity)
5
6require "active_record"
7require "logger"
8
9ActiveRecord::Base.logger = Logger.new(STDOUT)
10ActiveRecord::Base.establish_connection :adapter => "postgresql", :database => "francois"
11
12ActiveRecord::Base.connection.execute "DROP TABLE IF EXISTS values"
13ActiveRecord::Base.connection.execute "CREATE TABLE values(user_id INTEGER NOT NULL, quantity INTEGER NOT NULL DEFAULT 1, cost INTEGER NOT NULL DEFAULT 2)"
14
15class Value < ActiveRecord::Base
16end
17
182.times do
19 5.times do |n|
20 Value.create!(:user_id => n)
21 end
22end
23
24Value.group(:user_id).select('user_id, SUM(cost) AS total_cost, SUM(quantity) AS total_quantity').each do |value|
25 p [value.user_id, value.total_quantity, value.total_cost]
26end