Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何结合结果得出阿森纳赢得全部可用六分的球队数量_Mysql_Sql - Fatal编程技术网

Mysql 如何结合结果得出阿森纳赢得全部可用六分的球队数量

Mysql 如何结合结果得出阿森纳赢得全部可用六分的球队数量,mysql,sql,Mysql,Sql,我有一张名为“主场”的表格,用来存储阿森纳足球俱乐部在2003-04赛季主场联赛中的表现,而“客场”表格则存储阿森纳在同一赛季客场的表现 Table `home`: Opponent Goal_Scored Goal_Conceded Everton 2 1 Aston Villa 2 0 Portsmouth 1

我有一张名为“主场”的表格,用来存储阿森纳足球俱乐部在2003-04赛季主场联赛中的表现,而“客场”表格则存储阿森纳在同一赛季客场的表现

Table `home`:

Opponent           Goal_Scored      Goal_Conceded
Everton                2                 1
Aston Villa            2                 0
Portsmouth             1                 1
Newcastle United       3                 2
Chelsea                2                 1
Tottenham Hotspur      2                 1
Fulham                 0                 0
Blackburn Rovers       1                 0
Wolverhampton Wonderers 3                0
Middlesbrough          4                 1


Table `away`:

Opponent           Goal_Scored      Goal_Conceded
Everton                1                 2
Aston Villa            2                 2
Portsmouth             1                 2
Newcastle United       2                 3
Chelsea                2                 2
Tottenham Hotspur      2                 3
Fulham                 2                 0
Blackburn Rovers       1                 2
Wolverhampton Wonderers 3                2
Middlesbrough          1                 4
请注意,一支球队获胜得三分,平局得一分,失利得零分

我想确定阿森纳赢得所有可用六分的球队数量

为此,我编写了部分代码:

CREATE TABLE home (
    Opponent varchar(60),
    Goal_Scored int(8),
    Goal_Conceded int(8)
);

CREATE TABLE away (
    Opponent varchar(60),
    Goal_Scored int(8),
    Goal_Conceded int(8)
);

INSERT INTO home (Opponent, Goal_Scored, Goal_Conceded)
VALUES 
("Everton",2,1),
("Aston Villa",2,0),
("Portsmouth",1,1),
("Newcastle United",3,2),
("Chelsea",2,1),
("Tottenham Hotspur",2,1),
("Fulham",0,0),
("Blackburn Rovers",1,0),
("Wolverhampton Wonderers",3,0),
("Middlesbrough",4,1);


INSERT INTO away (Opponent, Goal_Scored, Goal_Conceded)
VALUES
("Everton",1,2),
("Aston Villa",2,2),
("Portsmouth",1,2),
("Newcastle United",2,3),
("Chelsea",2,2),
("Tottenham Hotspur",2,3),
("Fulham",2,0),
("Blackburn Rovers",1,2),
("Wolverhampton Wonderers",3,2),
("Middlesbrough",1,4);
为了得到综合结果,我尝试了下面的代码,但没有得到预期的结果:

select a.opponent
from home a 
where a.goals_scored > a.goals_conceded
union all
select b.opponent
from away b 
where b.goals_scored > b.goals_conceded

但是,我应该如何结合这些结果来获得阿森纳赢得所有可用六分的球队的数量如果我理解正确,下面是你可以做到的:

select t.Opponent, sum(CASE WHEN goal_scored - goal_conceded > 0 THEN 3
WHEN goal_scored - goal_conceded = 0 THEN 1 ELSE 0 end ) points 
from 
( SELECT * FROM home a
  union all
  SELECT * FROM away a
) t
group by Opponent
having points = 6;

dbfiddle

因为您已经有了一个解决方案,下面是连接解决方案:

选择对手 从家里 利用对手加入 home.goal\u得分的地方>home.goal\u失球的地方 客场进球>客场失球;
我们加入每支球队的主客场记录,然后过滤掉阿森纳没有赢得两场比赛的任何东西。

没有必要根据您的要求检查分数。 条件应为同一对手的进球>失球为真:

如果只需要团队数量,那么使用EXISTS进行聚合会更好:

SELECT COUNT(*) number_of_teams 
FROM home h
WHERE h.Goal_Scored > h.Goal_Conceded
  AND EXISTS (SELECT 1 FROM away a WHERE a.Opponent = h.Opponent AND a.Goal_Scored > a.Goal_Conceded) 

参见。

更简单地说,你需要寻找进球>失球的球队,而不是实际计算和总结分数,你需要这样做。您知道如何连接吗?也就是说,您可以将这两个表的点作为子查询计算,或者在MySQL 8+中计算CTE,然后如果您愿意,可以连接它们。但你不需要,你只需要从每张桌子上找到赢家。事实上,我需要加入,因为最终,我只需要找到所有的球队,阿森纳在主场和客场分别得到6分3分和3分。。。事实上,你是对的,进球>失球应该足够好,可以参加比赛…谢谢分享。。。我只是想知道,如果a.gool_得分>a.gool_失球,这是否也有可能,因为从数学上来说,这个条件在主场赢3分,在客场赢3分。因此,计算他们在主场和客场获胜的团队数量???是的,这也是可能的,见Rup的答案
SELECT COUNT(*) number_of_teams 
FROM home h
WHERE h.Goal_Scored > h.Goal_Conceded
  AND EXISTS (SELECT 1 FROM away a WHERE a.Opponent = h.Opponent AND a.Goal_Scored > a.Goal_Conceded)