1

私がやろうとしていることのアイデアをあなたに与えるために。単純化されたテーブル構造は次のようになります。

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 句を実行する方法がわからないという事実に起因しているようです。

ありがとう。

4

2 に答える 2

2

caseステートメントでそれを行うことができます:

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

または、ユニオンで解決できます。

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
于 2013-03-13T15:11:58.067 に答える
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
于 2013-03-13T15:09:16.007 に答える