2012-06-19 4 views
0

나는 다음과 같은 쿼리가 작동하지 않으며 어떻게 수정해야하는지 궁금합니다.레일 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로 설정된 경우 외국 키가 결과 테이블에 표시되는 횟수의 카운트에 의해 부모 플레이어의 기록을 제한하기 위해 노력하고있어. 그러나 때로는 외래 키가 Results 테이블에 나타나지만 부울 win 필드가 false가되어보고 싶지 않은 레코드의 수가 0이됩니다. 그래서이 0 레코드의 수를 제거하려고합니다. 어디에요를 사용하여 절 ("> 0 승리")하지만 난이 오류를 얻을 : 그것에 의해

PGError: ERROR: column "wins" does not exist

재미있는 것은 내가하려고 할 때 그것이 wins 필드를 발견하고 순서를하지만, 어디 절을 추가하지와 함께.

+0

트릭을 수행하지 않은 곳에서 동일한 결과로 대체 – Noz

+0

운영상 문제가있는 것처럼 보입니다. 선택 항목을 선택 취소하고 대신 테이블에 가입하는 것이 좋습니다. – Noz

답변

1

나는 다음과 같은 쿼리가 작동합니다 생각 : 당연히 나는 그것을 테스트하지 않았습니다하지만

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

이것은, 따라서 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

관련 문제