2014-02-19 132 views
2

我有一個投票模型和一個放置模型,用於跟蹤每個月末員工在投票結束時完成的位置。如何從where語句訂購結果

投票模式

create_table "votes", :force => true do |t| 
t.integer "phone_id", :limit => 8 
t.integer "employee_id" 
t.integer "score" 
end 

安置模式

create_table "placements", :force => true do |t| 
t.integer "employee_id" 
t.date  "month" 
t.integer "votes_count", :default => 0 
t.integer "position" 
t.integer "total_score", :default => 0 
end 

我可以檢索的最多票數順序展示位置特定月份這樣的:

business.placements.where(month: month).order('votes_count desc') 

我想要得到的按平均分數排序(而不是大多數選票)。

平均分數可以像這樣制定出:

average_score = placement.total_score/placement.votes_count 

我怎麼會爲了我在那裏通過AVERAGE_SCORE聲明?

+0

你就不能添加的平均分十進制領域,有一個之前保存的位置,然後按該字段排序? –

+0

你有沒有試過「Order BY votes_count DESC」? – Rene

+0

@Baloo我可以但我認爲這可能是浪費存儲的一些方法。但我認爲你可能是對的。 – grabury

回答

0

這是一個有點長鏡頭,但儘量

business.placements.where(month: month).select('placements.*, (placements.total_score/placements.votes_count) AS average_score').order('average_score') 
2

試試這個

business.placements.where(month: month).order('total_score/votes_count desc') 
+1

此迴應有效。只是在本地進行測試我建議你將這個平均值保存在數據庫中,然後通過它來排序,如果你使用這個選擇的話。 –