概要
目的
TableAのvalueをidごとに集計するんだけど、①全集計と②とある条件で集計した結果をidごとに紐付けて差分とる。というようなSQLを書きたかった
やり方
こちら参考
table_a_all_sum = TableA.group(:id).select('id', 'sum(value) AS sum_value') table_a_con_sum = TableA.where("条件").group(:id).select('id', 'sum(value) AS con_sum_value')
ここまではおk
で、記事を参考にしたところ、サブクエリは joins
にも食わすことができるとのことなのでこうした
TableA.joins("inner join (#{table_a_all_sum.to_sql}) table_a_all_sum on table_a.id = table_a_all_sum.id", "inner join (#{table_a_con_sum.to_sql}) table_a_con_sum on table_a.id = table_a_con_sum.id")
そしたら無事できた。あとは引くだけ
"↑の続きで".select('table_a_all_sum.sum_value - table_a_con_sum.con_sum_value AS sub_value')