А если нам нужны все клиенты, даже если у них не было транзакций в эту дату — как это вывести?

Начните с клиентов и присоедините агрегат транзакций через 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 удалит клиентов без операций, чего в этой задаче делать нельзя.

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

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

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

Подробнее