I have two models - Parent
and Params
, where parent has_many params
Currently, my methods looks like (not that it is under Parent class):
def total_sum
params.select(
'params.*, (
SUM(mono_volume_annular) +
SUM(day_volume_annular) +
SUM(night_volume_annular) +
SUM(exclusive_volume_annular)
) AS summed_volume_annular'
).group('params.id').sum(&:summed_volume_annular)
end
How can I improve this SQL query to get rid of .sum(&:summed_volume_annular)
method call?
If I'll try to summarize it without converting :summed_volume_annular
to proc, I'll get this error: ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "summed_volume_annular" does not exist
An interesting note - If I'll try to save the result of this query
params.select('(
SUM(mono_volume_annular) +
SUM(day_volume_annular) +
SUM(night_volume_annular) +
SUM(exclusive_volume_annular)
) AS summed_volume_annular'
)
I will get this object [#<Parameter:0x00000009f1c7d8 id: nil>]
Strange that summed_volume_annular
is absent...
I would do something like this:
def total_sum
columns_to_sum = %w(mono_volume_annular day_volume_annular night_volume_annular
exclusive_volume_annular)
sum = columns_to_sum.map{ |col| "COALESCE(#{col}, 0)" }.join(' + ')
Params.sum(sum)
end
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.