ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

サブクエリの結果とjoinする

スポンサードリンク

概要

  • SQLだったら、2つのサブクエリの結果をjoinして結果を出したかった
  • Railsでのやりかたわからんかったので色々試す

目的

TableAのvalueをidごとに集計するんだけど、①全集計と②とある条件で集計した結果をidごとに紐付けて差分とる。というようなSQLを書きたかった

やり方

こちら参考

takakisan.com

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')