Соедините пользователей со счетами и операциями, затем суммируйте amount по пользователю. LEFT JOIN и COALESCE сохранят пользователей без операций с итогом 0.
Подсчёт общей суммы операций для каждого пользователя
Соедините пользователей со счетами и операциями, затем суммируйте amount по пользователю. LEFT JOIN и COALESCE сохранят пользователей без операций с итогом 0.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо вывести суммарную величину всех транзакций, выполненных каждым пользователем.
Имеются три таблицы:
- users (user_id, phone, name, age, email)
- accounts (account_id, user_id, created_by, changed_by)
- operations (account_id, amount, operation_time, operation_id)
Ответ
Соедините пользователей со счетами и операциями, затем суммируйте amount по пользователю. LEFT JOIN и COALESCE сохранят пользователей без операций с итогом 0.
Запрос:
SELECT u.user_id, u.name, COALESCE(SUM(o.amount), 0) AS total_amount
FROM users u
LEFT JOIN accounts a ON a.user_id = u.user_id
LEFT JOIN operations o ON o.account_id = a.account_id
GROUP BY u.user_id, u.name;
Предполагаются уникальные ключи пользователей и счетов и одна валюта или заранее приведённые суммы. Не используйте SUM(DISTINCT amount): одинаковые суммы могут принадлежать разным операциям. Знак amount учитывается как хранится; складывать абсолютные значения условие не просит.