Sql 如何检索与特定WHERE条件匹配的每组记录的计数?

Sql 如何检索与特定WHERE条件匹配的每组记录的计数?,sql,where,Sql,Where,让你知道我想做什么。简化的表格结构为: homeTeamName | awayTeamName | homeTeamGoals | awayTeamGoals ----------------------------------------------------------- Team1 | Team2 | 4 | 3 Team1 | Team3 | 0 | 1 Te

让你知道我想做什么。简化的表格结构为:

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 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

您可以通过案例陈述来实现:

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

谢谢你,丹。这在我的头脑中是有道理的,所以如果有人能投赞成票,那就太好了!正如预期的那样。第二条路是我选择的。如此接近,我不打算发布我的。嗨,丹,我也在努力寻找一支球队的“真正”形式,所以它包括胜利和平局。例如,一场胜利是1分,一场平局是0.5分。因此,它将返回,比如说5支球队,按形式排列(3胜1平=3.5等)。您建议采用什么样的结构?同样,我对如何创建新的“变量”没有任何经验。在OOP中,我当然不会有问题,但SQL有时确实让我感到困惑!