Я подозреваю, что ваш запрос может быть упрощен следующим образом:
SELECT
s.intakeid AS intake,
SUM(CASE WHEN s.status = 3 THEN 1 ELSE 0 END) as active,
SUM(CASE WHEN s.status = 5 THEN 1 ELSE 0 END) as deffered,
SUM(CASE WHEN s.status = 16 THEN 1 ELSE 0 END) as inactive,
SUM(CASE WHEN s.status = 9 THEN 1 ELSE 0 END) as missing,
SUM(CASE WHEN s.status = 6 THEN 1 ELSE 0 END) as widthdrawn,
SUM(CASE WHEN s.status IN (18, 7, 36) THEN 1 ELSE 0 END) as dis_ter_dereg
FROM student s
INNER JOIN ref_intake ri ON s.intakeid = ri.intakeid
WHERE
s.intakeid
AND s.status IN (3, 5, 16, 9, 6, 18, 7, 36)
AND s.courseid IN (3, 17)
GROUP BY s.intakeid
ORDER BY ri.intakeno ASC
То есть:
большинство условий можно перенести в предложение WHERE
- это должно фактически удалить строки, в которых не найдено ни одного условия
кажется, что вы действительно хотите INNER JOIN
, а не LEFT JOIN
- но вы можете отменить это изменение при необходимости
псевдонимы таблиц облегчают чтение и запись запроса
OR
редактируемые условия могут быть упрощены для использования IN