Дана таблица Exams:
id | student | grp | score
1 | Айдос | A | 80
2 | Мария | A | 60
3 | Данияр | B | 90
4 | Алина | B | 75
5 | Ержан | C | 50
6 | Софья | C | 70
7 | Тимур | A | 70
Какой результат (grp — количество) вернёт запрос?
SELECT grp, COUNT(*) FROM Exams WHERE score >= 70 GROUP BY grp HAVING COUNT(*) >= 2;
Показать ответ и разборСкрыть ответ и разбор
Верный ответ
- DA — 2; B — 2
Разбор
Сначала WHERE оставляет строки с score >= 70: Айдос (A, 80), Данияр (B, 90), Алина (B, 75), Софья (C, 70), Тимур (A, 70). Затем GROUP BY считает строки по группам: A — 2, B — 2, C — 1. Условие HAVING COUNT(*) >= 2 отбрасывает группу C. Остаются «A — 2; B — 2». Вариант «A — 3; B — 2; C — 2» получится, если не учитывать WHERE; вариант «A — 1; B — 2» — если взять строгое условие score > 70; вариант «A — 2; B — 2; C — 1» — если не учитывать HAVING.