SQL. Вывод нулевых значений через COUNT

Есть таблица: ученики, оценки

Необходимо вывести: количество двоек у учеников у которых больше 4 пятерок

У меня не получается вывести тех учеников, у которых есть 5+ пятерок, но нет двоек. Т.е где COUNT(GRADE) равен 0, мой запрос не выводит его.

STUDENT_NAME | COUNT(GRADE)

Petrov | 0

Bashirov | 2

Мой код

SELECT STUDENT_NAME, COUNT(GRADE)
FROM GRADES 
WHERE STUDENT_NAME IN (SELECT STUDENT_NAME FROM GRADES WHERE GRADE = 5 GROUP BY STUDENT_NAME HAVING COUNT(GRADE) >= 5)
AND GRADE = 2
GROUP BY STUDENT_NAME

Также вопрос: есть ли возможность решить задачу без использования подзапросов? Через CASE?


Ответы (1 шт):

Автор решения: Akina

количество двоек у учеников у которых больше 4 пятерок

Ну обычная же условная агрегация.

Для MySQL:

SELECT student_name, SUM(grade = 2)
FROM grades 
GROUP BY student_name 
HAVING SUM(grade = 5) > 4

Для других СУБД - заменить сравнение на CASE.

→ Ссылка