如何创建多个MySQL计数/分组依据/子查询?
我的数据库中有一个包含足球比赛结果的表格,相关列包括matchNumber(基于日期的数字)、Result(结果“W”、“D”或“L”)、goalsFor、goalsAg和manager 我有一个疑问:如何创建多个MySQL计数/分组依据/子查询?,mysql,Mysql,我的数据库中有一个包含足球比赛结果的表格,相关列包括matchNumber(基于日期的数字)、Result(结果“W”、“D”或“L”)、goalsFor、goalsAg和manager 我有一个疑问: SELECT COUNT(*) AS P, (SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") AS W, (SELECT COUNT(*) FROM match_results WHERE m
SELECT COUNT(*) AS P,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") AS W,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D") AS D,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "L") AS L,
SUM(GoalsFor) AS F,
SUM(GoalsAg) AS A,
ROUND((SELECT SUM((((SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") * 2) +(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D")))/((SELECT COUNT(*) FROM match_results WHERE manager = 13)*2)*100),2) AS pct
FROM match_results WHERE manager = 13;
返回以下结果:
P W D L F A Pct
213 92 49 72 296 247 54.69
这很好用。然而,结果跨越了许多季节,我想将查询的输出分解以反映这一点。我尝试了以下方法:
SELECT LEFT(matchNumber,4) AS Season,
COUNT(*) AS P,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") AS W,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D") AS D,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "L") AS L,
SUM(GoalsFor) AS F,
SUM(GoalsAg) AS A,
ROUND((SELECT SUM((((SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") * 2) +(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D")))/((SELECT COUNT(*) FROM match_results WHERE manager = 13)*2)*100),2) AS pct
FROM match_results WHERE manager = 13
GROUP BY Season;
此查询的结果可以在下图中看到:
正如你所看到的,“季节”、“p”、“F”和“A”列已经给出了我想要的结果,但是其余的列重复了总数。因此,我的问题是,我如何调整我的查询,以便“W”、“D”和“L”列也能给出每行输出中的年度总计,而不是总计?问题是,您的三个子查询不会按季节限制它们的计数。尝试将其更改为:
SELECT @season:=LEFT(matchNumber,4) AS Season,
COUNT(*) AS P,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W" AND LEFT(matchNumber,4)=@season) AS W,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D" AND LEFT(matchNumber,4)=@season) AS D,
(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "L" AND LEFT(matchNumber,4)=@season) AS L,
SUM(GoalsFor) AS F,
SUM(GoalsAg) AS A,
ROUND((SELECT SUM((((SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "W") * 2) +(SELECT COUNT(*) FROM match_results WHERE manager = 13 AND Result = "D")))/((SELECT COUNT(*) FROM match_results WHERE manager = 13)*2)*100),2) AS pct
FROM match_results WHERE manager = 13
GROUP BY Season;
感谢您的建议,但它不起作用,它返回错误“where子句中的Unknown column'mr.seasure'”好的,我已经更新了我的答案。它现在使用一个变量
@seasure
,该变量似乎在子查询中起作用