Отфильтруйте price_total >= 1000 до группировки, посчитайте строки по user_id и отсортируйте COUNT(*) по убыванию.
Число заказов с общей суммой не менее 1000
Отфильтруйте price_total >= 1000 до группировки, посчитайте строки по user_id и отсортируйте COUNT(*) по убыванию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сформулируйте SQL‑запрос, который выдаст количество заказов для каждого клиента, у которых значение price_total составляет 1000 или более. Результат должен быть отсортирован по убыванию количества заказов.
| user_id | order_count |
|---|---|
| 111 | 2 |
| 222 | 1 |
| 333 | 1 |
CREATE TABLE orders (
id INT,
user_id INT,
created_at TIMESTAMP,
price_total INT
);
orders:
- id: 1
user_id: 111
created_at: "2024-01-01 10:00:00"
price_total: 2000
- id: 2
user_id: 222
created_at: "2024-01-02 10:00:00"
price_total: 1000
- id: 3
user_id: 111
created_at: "2024-04-01 10:00:00"
price_total: 20000
- id: 4
user_id: 222
created_at: "2024-05-01 10:00:00"
price_total: 500
- id: 5
user_id: 333
created_at: "2024-05-02 10:00:00"
price_total: 10000
Ответ
Отфильтруйте price_total >= 1000 до группировки, посчитайте строки по user_id и отсортируйте COUNT(*) по убыванию.
Запрос:
SELECT user_id, COUNT(*) AS order_count
FROM orders
WHERE price_total >= 1000
GROUP BY user_id
ORDER BY order_count DESC, user_id;
Для примера результат — 111: 2, 222: 1, 333: 1. Дополнительная сортировка по user_id фиксирует порядок при одинаковом числе заказов. WHERE проверяет сумму каждого отдельного заказа; HAVING SUM(price_total) >= 1000 решал бы другую задачу. Клиенты без подходящих заказов в такой запрос не попадают.