我已经尝试将这个普通的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}'")
答案 0 :(得分:0)
我的答案可能不是您所希望的,但我建议不要使用AR,请改用Sequel(http://sequel.jeremyevans.net/)。它使用Datasets
的概念,我认为它在AR中没有任何等价物。
免责声明:没有人要求我做广告。我同时使用AR和续集,我发现Sequel可以更好地执行复杂查询并避免N + 1问题。
答案 1 :(得分:0)
您是否尝试过find_by_sql
方法?