2013-03-13 1 views
1

내가하려는 일에 대한 아이디어를 제공합니다. 단순화 된 테이블 구조는 다음과 같습니다 :특정 WHERE 조건과 일치하는 레코드 집합의 수를 어떻게 검색합니까?

homeTeamName | awayTeamName | homeTeamGoals | awayTeamGoals 
----------------------------------------------------------- 
Team1  | Team2  |  4  |  3 
Team1  | Team3  |  0  |  1 
Team3  | Team2  |  0  |  0 

데이터는 축구 게임에서 가져온 것입니다. 내가하려는 것은 '폼'팀, 즉 가장 많은 게임에서이긴 팀을 검색하는 것입니다. 위의 표에는 더 많은 데이터가 채워져 있다고 가정합니다. 아래에서 볼 수 있듯이 쿼리가 특정 팀의 '윈 카운트'를 검색하려는 경우 매우 쉽습니다.

SELECT COUNT(*) as winCount FROM matches_new 
    WHERE (
     homeTeamName = 'Team1' AND 
     homeTeamGoals > awayTeamGoals 
    ) OR (
     awayTeamName = 'Team1' AND 
     awayTeamGoals > homeTeamGoals 
    ) 
    ORDER BY winCount DESC LIMIT 1 

이 쿼리는 특정 팀이 얻는 '승리'를 반환합니다. 이제는 쿼리를 통해 모든 팀을 확인한 다음 가장 많은 '승리'가있는 팀의 이름과 '승리'(승리 횟수)를 반환합니다.

나는 진정한 단서가 없다. 저는 많은 검색을 시도했지만 이런 유형의 작업을 설명하는 방법이나 비슷한 것을 생각하는 것조차 어렵습니다. 내 문제는 가치가 무엇인지에 대해 구체적이지 않으면 서 WHERE 절을 어떻게 수행할지 모르겠다는 사실에서 비롯된 것 같습니다.

감사합니다.

select winningTeam, count(*) as winCount from (
    select case 
      when homeTeamGoals > awayTeamGoals then homeTeamName 
      when awayTeamGoals > homeTeamGoals then awayTeamName 
      else null 
      end as winningTeam 
     from matches_new 
) winners 
    where winningTeam is not null 
    group by winningTeam 
    order by winCount desc limit 1 

또는 당신은 노동 조합과 그것을 해결할 수 :

답변

0

는이

select teamname, count(*) winCount from 
(
select case when homeTeamGoals > awayTeamGoals then hometeamname 
      when wayTeamGoals > homeTeamGoals then awayTeamName end Teamname 
from matches_new 
where (homeTeamGoals > awayTeamGoals or wayTeamGoals > homeTeamGoals) 
) 
group by teamname 
ORDER BY winCount DESC LIMIT 1 
2

당신은 case 문으로 그것을 할 수보십시오

SELECT teamName, COUNT(*) as winCount from (
    select homeTeamName as teamName from matches_new 
     WHERE homeTeamGoals > awayTeamGoals 
    union all 
    select awayTeamName as teamName from matches_new 
     WHERE awayTeamGoals > homeTeamGoals 
) as allWinners 
    GROUP BY teamName 
    ORDER BY winCount DESC LIMIT 1 
+0

감사 댄. 이것은 내 머리에 의미가 있습니다, 누군가가 그것을 upvote 수 있다면, 그 위대한 것입니다! 예상대로 작동합니다. – rich2165990

+0

+1 두 번째 방법은 제가 함께 간 것입니다. 그렇게 가까이서 나는 나의 것을 게시하지 않을 것이다. –

+0

안녕 댄, 나는 또한 팀의 '진정한'형태를 찾으려고 노력하고 있습니다. 그래서 그것은 승리와 무승부를 모두 포함합니다. 예를 들어, 승리는 1 점, 추첨 0.5가됩니다. 그러고 나서 팀은 5 팀을 폼 순서대로 (3 승 1 무 3.5 등) 말합니다. 이것을하기 위해 어떤 종류의 구조를 권하고 싶습니까? 다시 말하지만, 저는 새로운 '변수'를 만드는 방법에 대한 경험이 없습니다. OOP에서는 물론 문제가 없지만 SQL은 때때로 나를 혼란스럽게합니다! – rich2165990

관련 문제