В базе данных есть таблица Sales(id, product, category, qty, price):
1, Ручка, Канцелярия, 10, 50
2, Тетрадь, Канцелярия, 20, 30
3, Мышь, Техника, 3, 1500
4, Клавиатура, Техника, 2, 2500
5, Карандаш, Канцелярия, 15, 20
6, Флешка, Техника, 5, 2000
7, Папка, Канцелярия, 2, 100
Выполняется запрос:
SELECT category, SUM(qty*price) AS total FROM Sales WHERE qty >= 3 GROUP BY category HAVING SUM(qty*price) > 1500 ORDER BY total DESC;
Какой результат вернёт запрос?
Показать ответ и разборСкрыть ответ и разбор
Верный ответ
- AОдна строка: Техника, 14500
Разбор
1) WHERE qty >= 3 отбирает строки до группировки: строки с id 4 (qty = 2) и 7 (qty = 2) отбрасываются. 2) Группировка по category. Канцелярия: 10·50 + 20·30 + 15·20 = 500 + 600 + 300 = 1400. Техника: 3·1500 + 5·2000 = 4500 + 10000 = 14500. 3) HAVING SUM(qty*price) > 1500 отбирает группы после агрегирования: Канцелярия (1400) не проходит, Техника (14500) проходит. 4) Остаётся одна строка: Техника, 14500. Вариант «Две строки: Техника, 19500 и Канцелярия, 1600» получается, если не учитывать WHERE, а вариант «Две строки: Техника, 14500 и Канцелярия, 1400» — если не учитывать HAVING. Вариант «Одна строка: Техника, 19500» неверен, так как в сумму попала отброшенная WHERE строка.