经过2天的反复试验,我刚刚完成了此mysql查询。它工作正常,但看起来确实很可怕。是否可以简化查询?当然,所有帮助将不胜感激。
SELECT
p.*,
COUNT(oT.Ontmoeting_ID) + COUNT(oU.Ontmoeting_ID) AS 'played',
COUNT(case oT.Ontmoeting_Uitploeg_FF when 1 then 1 else case oT.Ontmoeting_Thuisploeg_Bonus when 3 then 1 else null end end)
+ COUNT(case oU.Ontmoeting_Thuisploeg_FF when 1 then 1 else case oU.Ontmoeting_Uitploeg_Bonus when 3 then 1 else null end end)
- COUNT(case oU.Ontmoeting_Thuisploeg_FF when 1 then case oU.Ontmoeting_Uitploeg_FF when 1 then 1 else null end end)
- COUNT(case oT.Ontmoeting_Uitploeg_FF when 1 then case oT.Ontmoeting_Thuisploeg_FF when 1 then 1 else null end end) AS 'won',
COUNT(case oT.Ontmoeting_Thuisploeg_Bonus when 1 then 1 else null end) +
COUNT(case oU.Ontmoeting_Uitploeg_Bonus when 1 then 1 else null end) AS 'draw',
COUNT(case oU.Ontmoeting_Uitploeg_FF when 1 then 1 else case oU.Ontmoeting_Uitploeg_Bonus when 0 then 1 else null end end)
+ COUNT(case oT.Ontmoeting_Thuisploeg_FF when 1 then 1 else case oT.Ontmoeting_Thuisploeg_Bonus when 0 then 1 else null end end) AS 'lost',
SUM(COALESCE(oT.Ontmoeting_Thuisploeg_Totaal, 0)) + SUM(COALESCE(oU.Ontmoeting_Uitploeg_Totaal, 0)) AS 'Totaal'
FROM ploegen AS p
LEFT OUTER JOIN ontmoetingen AS oT ON oT.Ontmoeting_Thuisploeg_ID = p.Ploeg_ID AND oT.Ontmoeting_Competitie_ID = 1 and oT.Ontmoeting_Speelweek <= 2 AND (oT.Ontmoeting_Thuisploeg_Totaal > 0 OR oT.Ontmoeting_Thuisploeg_FF = 1)
LEFT OUTER JOIN ontmoetingen AS oU ON oU.Ontmoeting_Uitploeg_ID = p.Ploeg_ID and oU.Ontmoeting_Competitie_ID = 1 AND oU.Ontmoeting_Speelweek <= 2 AND (oU.Ontmoeting_Uitploeg_Totaal > 0 OR oU.Ontmoeting_Uitploeg_FF = 1)WHERE p.Ploeg_ID IN (select Ontmoeting_Thuisploeg_ID from ontmoetingen WHERE Ontmoeting_Competitie_ID = 1)
GROUP BY p.Ploeg_ID
ORDER BY totaal DESC
该查询基于2个表“ ontmoetingen”和“ ploegen”(英语:“ encounters”和“ teams”)。它计算团队的整体排名,将所有比赛,获胜和平局相加。主要的困难是所有团队都同时进行主场和客场比赛,因此必须进行总结(“ Thuisploeg” =“主队”,“ Uitploeg” =“客队”。请告知我是否需要表格中的更多信息帮我解决。谢谢!
表格:“ Ontmoetingen”:
表格:“ ploegen”:
输出中的所有数字都是虚构的,因此与表数据不对应。希望这会有所帮助!