2012-06-19 52 views
0

我有以下查詢不起作用,我想知道如何解決它。Rails 3選擇查詢不會工作

Player.select("players.*, 
    (SELECT COUNT(*) FROM Results 
    WHERE results.player_id = players.id and win = true) 
as wins").where("wins > 0").order("wins desc") 

我想通過多少次當布爾win設置爲true,它的外鍵顯示在結果表的計數來限制父球員紀錄。但是,有時外鍵會出現在結果表中,但布爾型win字段將爲假,導致我不希望看到的記錄的計數爲零,所以我想我會嘗試並消除這些零記錄數使用。凡(「贏> 0」)條款,但我得到這個錯誤:通過它

PGError: ERROR: column "wins" does not exist

有趣的是,它發現wins場當我嘗試和秩序,但與添加的where子句。

+0

代替哪裏沒有做的伎倆,相同的結果 – Noz

+0

看起來這是一個操作順序的問題,我想我可能不得不退出選擇,並考慮加入表。 – Noz

回答

1

我相信下面的查詢將工作:

​​

這應該這樣Railsify,雖然我自然沒有測試它:

Player.select('players.*, count(results.id) as wins').joins('left join results on results.player_id = players.id and results.win = true').group('players.id').having('count(results.id) > 0').order('wins desc') 

如果你不關心行,其中勝= 0,你可以做一個內連接而不是左連接,這可能會更快。

+0

謝謝MrTheWalrus工作完美。我想我會選擇內連接。 – Noz