如何简化基于2个表的mysql查询?

时间:2019-03-28 13:19:18

标签: mysql join sum coalesce

经过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”:

Table: "Ontmoetingen":

表格:“ ploegen”:

enter image description here

预期输出: enter image description here

输出中的所有数字都是虚构的,因此与表数据不对应。希望这会有所帮助!

0 个答案:

没有答案