Начните с клиентов и присоедините агрегат транзакций через LEFT JOIN. Отсутствующую сумму замените на 0; фильтр по дате оставьте внутри агрегата или ON.
А если нам нужны все клиенты, даже если у них не было транзакций в эту дату — как это вывести?
Начните с клиентов и присоедините агрегат транзакций через LEFT JOIN. Отсутствующую сумму замените на 0; фильтр по дате оставьте внутри агрегата или ON.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Начните с клиентов и присоедините агрегат транзакций через LEFT JOIN. Отсутствующую сумму замените на 0; фильтр по дате оставьте внутри агрегата или ON.
Пример для условной схемы с одной строкой на клиента:
WITH daily AS (
SELECT client_id, SUM(amount) AS total
FROM transactions
WHERE transaction_date >= TIMESTAMP '2025-05-01 00:00:00'
AND transaction_date < TIMESTAMP '2025-05-02 00:00:00'
GROUP BY client_id
)
SELECT c.client_id, c.name, COALESCE(d.total, 0) AS total
FROM clients c
LEFT JOIN daily d ON d.client_id = c.client_id;
Имена колонок и дата здесь примерные. Если clients хранит историю, сначала выберите одну версию на согласованный момент. Условие по правой таблице в WHERE после LEFT JOIN удалит клиентов без операций, чего в этой задаче делать нельзя.