Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 - Fatal编程技术网

如何创建多个MySQL计数/分组依据/子查询?

如何创建多个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

我的数据库中有一个包含足球比赛结果的表格,相关列包括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 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
,该变量似乎在子查询中起作用