![](/img/trans.png)
[英]How to order grouped columns in an ActiveRecord Postgres query
[英]How to perform single sql query to sum columns from grouped results in activerecord?
我有兩個模型Parent
和Params
,其中parent has_many params
當前,我的方法看起來像(不是在Parent類下):
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
如何改善此SQL查詢以擺脫.sum(&:summed_volume_annular)
方法調用?
如果我嘗試在不將:summed_volume_annular
轉換為proc的情況下對其進行匯總,則會收到以下錯誤消息: ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "summed_volume_annular" does not exist
一個有趣的注釋-如果我嘗試保存此查詢的結果
params.select('(
SUM(mono_volume_annular) +
SUM(day_volume_annular) +
SUM(night_volume_annular) +
SUM(exclusive_volume_annular)
) AS summed_volume_annular'
)
我將獲得此對象[#<Parameter:0x00000009f1c7d8 id: nil>]
奇怪的是summed_volume_annular
不存在...
我會做這樣的事情:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.