Группируйте покупки по идентификатору пользователя и примените HAVING SUM(price) > 5000. Для примера суммы равны 15200 у Ивана и 8400 у Анны.
Выборка пользователей с суммой покупок более 5000₽
Группируйте покупки по идентификатору пользователя и примените 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 указан в рублях, как в примере; при хранении копеек порог переводят в те же единицы.