#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»:
Таблица: «ploegen»:
Все числа в выходных данных вымышлены, поэтому не соответствуют данным таблицы. Надеюсь, это поможет!
Комментарии:
1. Пожалуйста, переформатируйте свой вопрос, чтобы сделать его читабельным.
2. не могли бы вы предоставить некоторые примеры данных и ожидать результата?
3. «SQL-92 и более ранние версии не разрешают запросы, для которых список выбора, ИМЕЮЩИЙ условие или список ПОРЯДКА ПО относятся к неагрегированным столбцам, которые не названы в предложении GROUP BY » См. Руководство о
GROUP BY
, которое выглядит так, будто вы используете его неправильно, если только MySQL не мог использовать стандартную необязательную функцию SQL: 1999, которая называется функционально зависимой , которую мы не можем проверить безCREATE TABLE
инструкций..4. Я отредактировал вопрос, добавил таблицы и выходные данные.