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