簡體   English   中英

如何執行單個SQL查詢以匯總ActiveRecord中分組結果的列?

[英]How to perform single sql query to sum columns from grouped results in activerecord?

我有兩個模型ParentParams ,其中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM