Как я могу упростить этот запрос mysql, основанный на 2 таблицах?

#mysql #join #sum #coalesce

#mysql #Присоединиться #сумма #объединить

Вопрос:

после 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» = «Команда гостей». Пожалуйста, дайте мне знать, если потребуется дополнительная информация о таблицах, чтобы помочь мне. Спасибо!

Таблица: «Ontmoetingen»:

Таблица: quot;Ontmoetingenquot;:

Таблица: «ploegen»:

введите описание изображения здесь

Ожидаемый результат: введите описание изображения здесь

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

Комментарии:

1. Пожалуйста, переформатируйте свой вопрос, чтобы сделать его читабельным.

2. не могли бы вы предоставить некоторые примеры данных и ожидать результата?

3. «SQL-92 и более ранние версии не разрешают запросы, для которых список выбора, ИМЕЮЩИЙ условие или список ПОРЯДКА ПО относятся к неагрегированным столбцам, которые не названы в предложении GROUP BY » См. Руководство о GROUP BY , которое выглядит так, будто вы используете его неправильно, если только MySQL не мог использовать стандартную необязательную функцию SQL: 1999, которая называется функционально зависимой , которую мы не можем проверить без CREATE TABLE инструкций..

4. Я отредактировал вопрос, добавил таблицы и выходные данные.