Как я могу упростить этот запрос MySQL, основанный на 2 таблицах? - PullRequest
0 голосов
/ 28 марта 2019

после 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" (на английском языке: "встречи" и "команды").Он рассчитывает общее положение команд, складывая все сыгранные, выигранные и ничьи встречи.Основная трудность заключается в том, что все команды играют как в домашних, так и в выездных играх, и их необходимо суммировать ("Thuisploeg" = "Домашняя команда", "Uitploeg" = "Гости в гостях". Пожалуйста, дайте мне знать, если требуется дополнительная информация о столах).чтобы помочь мне. Thx!

Таблица: "Ontmoetingen":

Table:

Таблица: "ploegen":

enter image description here

Ожидаемый результат: enter image description here

Все выходные данные являются вымышленными, поэтому не соответствуют данным таблицы. Надеюсьэто помогает!

...