2013-03-13 105 views
0

我在RoR中很新,在編寫sql查詢時遇到了很多問題。我嘗試不使用(或僅使用一些)sql。RoR Active Record中的複雜查詢包括WHERE IN和AVG()

這是我試圖寫的查詢。

select AVG(results.value)as 'avg', form_rows.id, form_rows.domtype 
from form_rows 
join results on results.form_row_id = form_rows.id 
where form_rows.form_id = '9' and form_rows.domtype IN ('numfield', 'percentagefield') 
group by results.form_row_id 

注意,在第一個where條件(form_rows.form_id ='9')中,該值是作爲參數發送的。

如果有人能幫助我:)

+0

什麼是錯誤? – jcho360 2013-03-13 16:13:30

+1

...我假設它給你一個錯誤,因爲你使用了一個「GROUP BY」子句,但是你的大多數列不在聚合/列在GROUP BY中。您需要爲SELECT'列表中的每個列執行此操作。 – 2013-03-13 16:15:47

回答

1

我假設你有一個FormRow和合成模型

FormRow.joins(:results).where(:form_id => params[:form_id]) 
.where("form_rows.domtype IN(?)", ['numfield', 'percentagefield']) 
.group("results.form_row_id") 
.select("AVG(results.value) as 'avg', form_rows.id, form_rows.domtype") 

我沒有測試,但應該是它

順便說一句:如果你在select中使用它,你也應該通過form_rows.domtype進行分組。

+0

哇,這是令人印象深刻的。那麼,它幾乎可行。我有一個看起來不錯的結果,但我沒有結果中的平均字段([#FormRow id:33,domtype:「numfield」>,#,# ...]。任何想法爲什麼? – Olivier 2013-03-13 16:22:00

+0

也許使用results.first.avg返回你需要的東西?也許你需要模型上的attr_accessor來訪問它(attr_accessor:avg)現在還不太確定 – 2013-03-13 16:26:43

+0

AVG sql部分中缺少空間:AVG(results.value)爲'avg' – 2013-03-13 16:30:06