2013-01-05 51 views
0

我想在rails中(通過ActiveRecord)編寫以下SQL並且沒有運氣。 SQL如下所示:通過在列中的SUM列獲取最佳結果

select main_section_id, district_id, sum(answer) 
from section_inputs 
where year = 2012 
and main_section_id= 2 
group by main_section_id, district_id 
order by 3 desc 
limit 5 

我認爲列名稱是描述性的,在任何情況下遵循Rails約定。總結這個問題,我試圖得到排名前5位的特定MainSection,答案列這裏是整數代表我的得分系統。

我知道的問題有點太具體(爲我完成工作),但我真的在這裏遇到困難,如果要求解決方案太多,一些指導也會有很大的幫助。

感謝

+0

什麼現有的查詢有誤嗎?沒有給出預期的結果? – Nishant

+0

它正在工作,我正在嘗試使用Rails語法來編寫它。例如SectionInput.where(:year => 2012,:main_sections_id => 2)....並且我被卡住了 –

回答

1

這應該工作

SectionInput.select([:main_section_id, :district_id, 'sum(answer) as total']).where(:year=>2012).where(:main_section_id=>2).group(:main_section_id).group(:district_id).order('3 desc').limit(5) 

否則,您可以直接包含SQL運行

SectionInput.find_all_by_sql('select main_section_id, district_id, 
sum(answer) from section_inputs where year = 2012 and main_section_id= 
2 group by main_section_id, district_id order by 3 desc limit 5') 

而且,看看指南,瞭解所有Rails 3 querying basics

+0

謝謝,完美的工作我剛剛分組了'where和'group'語句。如果你用逗號分開它們,它就和連接一樣。偉大的幫助和片段我會回去很多次。 –