Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 在SQL中使用CASE时_Mysql_Sql - Fatal编程技术网

Mysql 在SQL中使用CASE时

Mysql 在SQL中使用CASE时,mysql,sql,Mysql,Sql,有两张桌子 表1包含matchid、mdate(matchdate)、stadium、team1和team2 表2包含matchid、teamid、playername、进球时间(进球时间) 得分) 这里,team1、team2、teamid是相同的(缩写为“GER”、“POL”、“RUS”等国家的名称) 现在,我需要以表格3的形式列出每一场比赛以及每一支球队的进球情况 表3将包含比赛日期、队1、队1、队2、队2 其中score1是第1组的进球数,score2是第2组的进球数 我尝试使用这个查询

有两张桌子

表1包含matchid、mdate(matchdate)、stadium、team1和team2

表2包含matchid、teamid、playername、进球时间(进球时间) 得分)

这里,team1、team2、teamid是相同的(缩写为“GER”、“POL”、“RUS”等国家的名称)

现在,我需要以表格3的形式列出每一场比赛以及每一支球队的进球情况

表3将包含比赛日期、队1、队1、队2、队2

其中score1是第1组的进球数,score2是第2组的进球数

我尝试使用这个查询,但它给出了错误。任何帮助都将不胜感激

编辑:qestion是来自sqlzoo.net/wiki/The_JOIN_操作的查询13
同时,我意识到在我的陈述中的错误。感谢所有人的帮助

如果您希望在两列中显示结果,则缺少逗号,否则语法错误。你不需要第二个“case”字


由于缺乏明确性,对你所追求的东西做出一些假设,但也许你想要这样的东西:

SELECT mdate,team1,score1,team2,score2
  ,SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END)
  ,SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END)
FROM game 
JOIN goal 
  ON matchid = id
这个怎么样:

SELECT game.mdate,
       game.team1,
       SUM(CASE WHEN goal.teamid=team1 THEN 1 ELSE 0 end) AS score1,
       game.team2,
       SUM(CASE WHEN goal.teamid=team2 THEN 1 ELSE 0 end) AS score2
FROM game 
JOIN goal ON goal.matchid = game.id
GROUP BY game.mdate, game.team1, game.team2

让你思考在自己进球的情况下会发生什么。

我认为考虑这一点最简单的方法是聚合
目标
表,以独立获得每个球队(每场比赛)的结果。然后将其连接回
游戏
表,以获得您想要的分数:

SELECT m.mdate, m.team1, g1.score, m.team2, g2.score
FROM game JOIN
     (select matchid, teamid, count(*) as score
      from goal
      group by matchid, teamid
     ) g1
     ON g2.matchid = game.matchid and
        g1.teamid = game.team1 join
     (select matchid, teamid, count(*) as score
      from goal
      group by matchid, teamid
     ) g2
     ON g2.matchid = game.matchid and
        g2.teamid = game.team2;

这是哪种SQL方言?你想在你的查询中用这句话做什么:count(gtime)=score1你说的SQL方言是什么意思?你对
count(gtime)=score1
有什么期望?@Parado我希望用它来汇总团队所取得的所有目标。这对我有什么帮助?这是一个如何编写查询的示例,但是我怎么用它来获得一支球队在比赛中的总进球数呢?乌龙球会影响它吗?q是q 13,你看过网址了吗?现在,你能进一步解释一下自己的进球数据吗?@Naga因为你是按球队排序的,所以自己的进球不应该影响它(我想这些进球会有其他球队的球员)。这就是说:如果没有进球,我最初提出的质疑应该不会奏效。左连接应该可以解决这个问题。
SELECT mdate,team1,score1,team2,score2
  ,SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END)
  ,SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END)
FROM game 
JOIN goal 
  ON matchid = id
SELECT game.mdate,
       game.team1,
       SUM(CASE WHEN goal.teamid=team1 THEN 1 ELSE 0 end) AS score1,
       game.team2,
       SUM(CASE WHEN goal.teamid=team2 THEN 1 ELSE 0 end) AS score2
FROM game 
JOIN goal ON goal.matchid = game.id
GROUP BY game.mdate, game.team1, game.team2
SELECT m.mdate, m.team1, g1.score, m.team2, g2.score
FROM game JOIN
     (select matchid, teamid, count(*) as score
      from goal
      group by matchid, teamid
     ) g1
     ON g2.matchid = game.matchid and
        g1.teamid = game.team1 join
     (select matchid, teamid, count(*) as score
      from goal
      group by matchid, teamid
     ) g2
     ON g2.matchid = game.matchid and
        g2.teamid = game.team2;