Mysql 在SQL中使用CASE时
有两张桌子 表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_操作的查询13Mysql 在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组的进球数 我尝试使用这个查询
同时,我意识到在我的陈述中的错误。感谢所有人的帮助如果您希望在两列中显示结果,则缺少逗号,否则语法错误。你不需要第二个“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;