Выборка пользователей с суммой покупок более 5000₽

Группируйте покупки по идентификатору пользователя и примените HAVING SUM(price) > 5000. Для примера суммы равны 15200 у Ивана и 8400 у Анны.

Короткий ответ

Что ответить на собеседовании

Группируйте покупки по идентификатору пользователя и примените HAVING SUM(price) > 5000. Для примера суммы равны 15200 у Ивана и 8400 у Анны.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо отобрать тех пользователей, у которых суммарная стоимость всех покупок превышает 5000 рублей. В результате следует вывести информацию в виде: идентификатор пользователя | имя | фамилия | общая сумма покупок.

//user
id|firstname|lastname |birth
1 | Ivan    | Petrov  | 1996-05-01
2 | Anna    | Petrova | 1996-06-01
3 | Ivan    | Petrov  | 1996-10-02

// purchase
sku|price|user_id|date
1  |5500 |1      | 2021-02-15 
1  |5700 |1      | 2021-01-15 
2  |4000 |1      | 2021-02-14 
3  |8000 |2      | 2021-03-01 
4  |400  |2      | 2021-05-12 

// ban_list
user_id | date_from
1       | 2021-03-08

Ответ

Группируйте покупки по идентификатору пользователя и примените HAVING SUM(price) > 5000. Для примера суммы равны 15200 у Ивана и 8400 у Анны.

Запрос:

SELECT u.id, u.firstname, u.lastname, SUM(p.price) AS total
FROM "user" u
JOIN purchase p ON p.user_id = u.id
GROUP BY u.id, u.firstname, u.lastname
HAVING SUM(p.price) > 5000
ORDER BY u.id;

Таблица ban_list в этом условии не участвует: фильтра до бана не задано. Иван с id=3 не объединяется с однофамильцем id=1 и не попадает в результат без покупок. Предполагается, что price указан в рублях, как в примере; при хранении копеек порог переводят в те же единицы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее