Запрос:
SELECT class, AVG(grade) AS avg_grade
FROM students
GROUP BY class
HAVING AVG(grade) >= 4
ORDER BY avg_grade DESC;
Разбор:
GROUP BY class — группируем строки по значению class. На каждую группу будет одна строка результата.
AVG(grade) — агрегатная функция, считает среднее по группе.
HAVING — фильтр после группировки. (WHERE фильтрует строки до группировки.)
AS avg_grade — псевдоним столбца для удобства.
Ключевое отличие WHERE и HAVING:
WHERE class = 10 — отбросит строки до подсчёта.
HAVING AVG(grade) >= 4 — отбросит уже сгруппированные классы.
Пример вывода:
class | avg_grade
10 | 4.7
9 | 4.2
Классы со средней <4 в выводе не появятся.