Объедините users и orders, сгруппируйте по пользователю и отфильтруйте группы через HAVING COUNT(o.id) > 5.
Получить список пользователей, у которых более пяти заказов
Объедините users и orders, сгруппируйте по пользователю и отфильтруйте группы через HAVING COUNT(o.id) > 5.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Составьте SQL‑запрос, который, используя таблицы users и orders:
- определит всех клиентов, у которых количество заказов превышает пять;
- вернёт их имя и количество заказов.
users +----+------+ | id | name | +----+------+ | | | +----+------+
orders +----+---------+---------------------+ | id | user_id | order_date | +----+---------+---------------------+ | | | | +----+---------+---------------------+
Ответ
Объедините users и orders, сгруппируйте по пользователю и отфильтруйте группы через HAVING COUNT(o.id) > 5.
SELECT u.name, COUNT(o.id) AS order_count
FROM users AS u
JOIN orders AS o ON o.user_id = u.id
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5;
Группировать только по имени нельзя: разные пользователи могут иметь одинаковые имена. Внутреннее соединение подходит, потому что пользователи без заказов всё равно не удовлетворяют условию. Строгое > 5 включает клиентов с шестью заказами и больше.
Если нужно учитывать только завершённые заказы или определённый период, соответствующий фильтр добавляют в WHERE до группировки. В исходном условии таких ограничений нет, поэтому считаются все строки заказов.