SELECT AVG(`col5`)
FROM `table1`
WHERE `id` NOT IN (
SELECT `id` FROM `table2`
WHERE `col4` = 5
)
group by `col2` having sum(`col3`) > 0
UNION
SELECT MAX(`col5`)
FROM `table1`
WHERE `id` NOT IN (
SELECT `id` FROM `table2`
WHERE `col4` = 5
)
group by `col2` having sum(`col3`) = 0
Для удобства чтения и производительности я думаю, что этот код можно было бы перестроить. Но как?Как реорганизовать этот код MySQL?
ИЗДАНИЯ
удалена наружная выберите
сделал первый выбор, чтобы вернуть сумму, а второй, чтобы вернуть другое значение
заменил
SUM
отAVG
Я смущен, потому что у вас есть «GROUP BY», но нет никаких столбцов в SELECT. Какие столбцы вы возвращаете? –
@Marcus Я скорректировал пример, чтобы отразить реальную причину, по которой существует объединение –
В любом случае вам не нужен UNION. Подумайте об использовании функции 'IF'. См. Мой ответ ниже обновленного. – codeholic