如何使用子查询转换普通的sql查询以使用rails活动记录

时间:2017-08-09 15:42:06

标签: ruby-on-rails activerecord rails-activerecord

我已经尝试将这个普通的sql查询转换为rails active record但我无法这样做。

select vote_shares.election_year as vs_election_name,
   vote_shares.party as vs_party,
   (sum(vote_shares.party_seats)/totals.total)*100 AS vs
   from pcdemographics INNER JOIN vote_shares on vote_shares.pc_id = pcdemographics.pc_id,
   (
         SELECT vote_shares.election_name, sum(vote_shares.party_seats) as total 
         FROM `pcdemographics` 
         INNER JOIN vote_shares on vote_shares.pc_id = pcdemographics.pc_id 
         GROUP BY `election_name`
   ) AS totals
   where vote_shares.election_name=totals.election_name
   group by vote_shares.party,vote_shares.election_name;

这就是我试过的

@vssubquery = Pcdemographic.select('vote_shares.election_name, sum(vote_shares.party_seats) as total').joins('INNER JOIN vote_shares on vote_shares.pc_id = pcdemographics.pc_id')

Pcdemographic.select("vote_shares.election_year as vs_election_year,
   vote_shares.party as vs_party,
   (sum(vote_shares.party_seats)/'#{totals.total}')*100 AS vs").from(@vssubquery,:totals)
                        .joins("INNER JOIN vote_shares on vote_shares.pc_id = pcdemographics.pc_id and vote_shares.election_name='#{totals.election_name}'")

2 个答案:

答案 0 :(得分:0)

我的答案可能不是您所希望的,但我建议不要使用AR,请改用Sequel(http://sequel.jeremyevans.net/)。它使用Datasets的概念,我认为它在AR中没有任何等价物。

免责声明:没有人要求我做广告。我同时使用AR和续集,我发现Sequel可以更好地执行复杂查询并避免N + 1问题。

答案 1 :(得分:0)

您是否尝试过find_by_sql方法?