Mysql SQL phpMyAdmin:列出客场胜利多于主场胜利的球队

Mysql SQL phpMyAdmin:列出客场胜利多于主场胜利的球队,mysql,Mysql,我有一个名为Football的数据库,其中包含以下表格:足球运动员、球队、经理、比赛。我正试图列出客场胜利比主场胜利多的球队。主场胜利是指一支球队在一场比赛中是主场球队,主场进球数超过客场进球数——客场胜利的情况正好相反 我可以使用以下方式显示主场胜利的数量: SELECT T.TeamName, COUNT(*) AS HomeWins FROM Teams T, Matches M WHERE M.HomeTeamID = T.TeamID AND M.HomeGoals > M.Aw

我有一个名为Football的数据库,其中包含以下表格:足球运动员、球队、经理、比赛。我正试图列出客场胜利比主场胜利多的球队。主场胜利是指一支球队在一场比赛中是主场球队,主场进球数超过客场进球数——客场胜利的情况正好相反

我可以使用以下方式显示主场胜利的数量:

SELECT T.TeamName, COUNT(*) AS HomeWins
FROM Teams T, Matches M
WHERE M.HomeTeamID = T.TeamID AND M.HomeGoals > M.AwayGoals
同样地,也可以得到客场胜利的次数

当我试图将这两种方法结合在一起,让客场胜率高于主场的球队获胜时,我遇到了一个错误,我尝试了几种不同的方法,包括:

SELECT T.TeamName
FROM Teams T, Matches M
WHERE M.HomeTeamID = T.TeamID
HAVING COUNT (M.HomeGoals > M.AwayGoals) > COUNT(M.AwayGoals > M.HomeGoals)

SELECT T.TeamName
FROM Teams T, Matches M
WHERE M.HomeTeamID = T.TeamID AND (COUNT (M.HomeGoals > M.AwayGoals) > COUNT(M.AwayGoals > M.HomeGoals)

SELECT T.TeamName
WHERE
  (COUNT DISTINCT(TeamID) FROM Teams T, Matches M WHERE M.HomeTeamID = T.TeamID AND M.HomeGoals > M.AwayGoals) >
  (COUNT DISTINCT(TeamID) FROM Teams T, Matches M WHERE M.AwayTeamID = T.TeamID AND M.HomeGoals < M.AwayGoals)
选择T.TeamName
来自T队和M队
其中M.HomeTeamID=T.TeamID
拥有计数(M.HomeGoals>M.AwayGoals)>COUNT(M.AwayGoals>M.HomeGoals)
选择T.TeamName
来自T队和M队
其中M.HomeTeamID=T.TeamID和(COUNT(M.homegools>M.AwayGoals)>COUNT(M.AwayGoals>M.homegools)
选择T.TeamName
哪里
(计算不同于团队T的(团队ID),匹配M,其中M.HomeTeamID=T.TeamID和M.HomeGoals>M.AwayGoals)>
(计算不同于团队T的团队ID,匹配M,其中M.AwayTeamID=T.TeamID和M.homegools

所有这些都不起作用。我知道我可能缺少一些非常基本的东西,但我真的很感激一些见解,因为我似乎无法让它起作用。

我已经为您的示例创建了一个示例数据库,并成功地编写了一个查询,该查询返回您要求的内容。它有点复杂,因此我将首先显示该查询,然后将其打断拥有:

SELECT away_query.id, away_query.name, away_query.away_wins, home_query.home_wins
FROM (
    SELECT teams.id, teams.name, count(*) as away_wins
    FROM teams
    JOIN matches ON teams.id = matches.away_team_id AND matches.away_goals>matches.home_goals
    GROUP BY teams.id
) as away_query
JOIN (
    SELECT teams.id, teams.name, count(*) as home_wins
    FROM teams
    JOIN matches ON teams.id = matches.home_team_id AND matches.home_goals>matches.away_goals
    GROUP BY teams.id
) as home_query
ON away_query.id=home_query.id
HAVING away_query.away_wins>home_query.home_wins
我注意到SQL中缺少的第一件事是JOIN子句,它在组合多个表中的数据时是必不可少的。 我写的第一个查询是检索每个球队客场胜利数的查询:

SELECT teams.id, teams.name, count(*) as away_wins
FROM teams
JOIN matches ON teams.id = matches.away_team_id AND matches.away_goals>matches.home_goals
GROUP BY teams.id
联接用于组合“团队”表的id字段上的团队和比赛表,以及比赛表的客场球队id字段,并仅过滤客场球队获胜的比赛。 该小组将统计每个队的客场胜利数

我对主场胜利做了同样的查询:

SELECT teams.id, teams.name, count(*) as home_wins
FROM teams
JOIN matches ON teams.id = matches.home_team_id AND matches.home_goals>matches.away_goals
GROUP BY teams.id
现在我有了一个关于每个球队客场胜利和主场胜利的查询,我只需要将它们组合起来,并按“客场胜利多于主场胜利”进行筛选。 我使用子查询完成了它。FROM是客场wins查询,由home wins查询连接。 ON组合了id字段上的两个查询,现在只剩下使用HAVING子句对其进行过滤:

HAVING away_query.away_wins>home_query.home_wins

结果是此答案中的第一个(很长)查询。

仅针对感兴趣的任何人,我成功地实现了这一功能,但我必须创建客场胜利和主场胜利的两个视图,并使用它们进行查询:

CREATE VIEW HomeWins (TeamName, HomeWins) 
AS SELECT T.TeamName, COUNT(*) 
FROM Teams T, Matches M 
WHERE M.HomeTeamID = T.TeamID 
AND M.HomeGoals > M.AwayGoals

CREATE VIEW AwayWins (TeamName, AwayWins) 
AS SELECT T.TeamName, COUNT(*) 
FROM Teams T, Matches M 
WHERE M.HomeTeamID = T.TeamID 
AND M.HomeGoals < M.AwayGoals

SELECT A.TeamName 
FROM HomeWins H, Awaywins A 
WHERE H.HomeWins < A.AwayWins 
AND A.TeamName = H.TeamName
创建视图HomeWins(团队名称、HomeWins)
选择T.TeamName时,计数(*)
来自T队和M队
其中M.HomeTeamID=T.TeamID
和M.HomeGoals>M.AwayGoals
创建视图AwayWins(团队名称、AwayWins)
选择T.TeamName时,计数(*)
来自T队和M队
其中M.HomeTeamID=T.TeamID
和M.homegools
您会遇到什么错误?您不能在and子句中直接使用count。您必须写入select count('xyz')来自abc…在and子句中..尝试此操作并告诉meCan您请共享表的结构?欢迎使用堆栈溢出!您可以阅读有关如何回答问题并创建一个。这使我们可以更轻松地帮助您。表的结构:团队(TeamID INT NOT NULL、TeamName VARCHAR(15)NOT NULL、City VARCHAR(15)NOT NULL、ManagerID INT)匹配足球运动员(10,2))Managers(ManagerID INT NOT NULL,ManagerName VARCHAR(15)NOT NULL,WeeklySalary DECIMAL(6,2))谢谢Royar,我尝试了这个,我得到了以下错误:…字段列表中的未知列'away_query.id'你能尝试模仿我创建的表吗?我创建了一个名为“teams”的表,其中包含字段:id、name和一个名为“matches”的表包含以下字段:id、home\u team\u id、away\u team\u id、home\u goals、away\u goals。还可以尝试在表中插入一些示例数据。