2

有两张桌子,

table1 包含 matchid,mdate(matchdate),stadium,team1,team2

table2 包含 matchid、teamid、playername、goal time(进球时间)

在这里,team1,team2,teamid 是相同的(国家的缩写,如 'GER'、'POL'、RUS' 等)

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

table3 将包含 matchdate,team1,score1,team2,score2

其中 score1 是 team1 的进球数, score2 是 team2 的进球数

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

SELECT mdate,team1,score1,team2,score2

  CASE WHEN teamid=team1 THEN count(gtime)=score1 ELSE 0

  CASE WHEN teamid=team2 THEN count(gtime) ELSE 0 
  END
  FROM game JOIN goal ON table1.matchid = table2.matchid

  group by matchid

编辑: qestion 是来自 sqlzoo.net/wiki/The_JOIN_operation 的查询 13 另外,我意识到我的情况下的错误 when 语句。谢谢大家的帮助

4

4 回答 4

1

这个怎么样:

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

让你思考如果发生乌龙球会发生什么。

于 2013-07-26T13:52:26.730 回答
0

如果您想要 2 列中的结果,则缺少逗号,否则您的语法错误。你不需要第二个“case”字

SELECT CASE WHEN 1=1 THEN 'equal'  when 1=3 THEN 'not equal' END 
于 2013-07-26T13:43:55.053 回答
0

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

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
于 2013-07-26T13:47:44.367 回答
0

我认为考虑这一点的最简单方法是汇总goal表格以独立获得每个团队的结果(对于每场比赛)。然后将其加入game表中以获得您想要的分数:

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;
于 2013-07-26T13:53:03.717 回答