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有时确实让我感到困惑!