Нужно получить список пользователей, у которых суммарная сумма завершённых заказов больше 1000. Таблица orders(user_id, amount, status), завершённые заказы имеют status = 'done'. Какой запрос корректен?

ASELECT user_id, SUM(amount) FROM orders WHERE status = 'done' GROUP BY user_id HAVING SUM(amount) > 1000;
BSELECT user_id, SUM(amount) FROM orders GROUP BY user_id HAVING status = 'done' AND SUM(amount) > 1000;
CSELECT user_id, SUM(amount) FROM orders WHERE SUM(amount) > 1000 AND status = 'done' GROUP BY user_id;
DSELECT user_id, SUM(amount) FROM orders WHERE status = 'done' AND SUM(amount) > 1000 GROUP BY user_id;
Правильный ответ. WHERE фильтрует строки, HAVING — агрегированные группы.

Разбор

Чтобы учесть только завершённые заказы, сначала фильтруем их в WHERE status = 'done', затем группируем по пользователю и отбираем группы по сумме через HAVING SUM(amount) > 1000. Корректный шаблон: SELECT user_id, SUM(amount) FROM orders WHERE status = 'done' GROUP BY user_id HAVING SUM(amount) > 1000;.

Проверь себя · 1/3разбор после ответа
Вы хотите вывести только те категории товаров, где суммарные продажи больше 10000. Таблица sales с колонками category, amount. Какой запрос корректен?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»