Агрегация ежедневных сумм и числа платежей

Сгруппируйте payment по дате и вычислите SUM(sum) вместе с COUNT(*). COUNT(*) считает строки платежей, включая строки, где сумма NULL, тогда как SUM такие значения пропускает.

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

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

Сгруппируйте payment по дате и вычислите SUM(sum) вместе с COUNT(). COUNT() считает строки платежей, включая строки, где сумма NULL, тогда как SUM такие значения пропускает.

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

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

Условие

В базе данных имеется таблица payment, содержащая столбцы: user_id, date, sum. Требуется составить SQL‑запрос, который выдаст два показателя для каждой даты: общий объём средств и количество совершённых транзакций.

Ответ

Сгруппируйте payment по дате и вычислите SUM(sum) вместе с COUNT(). COUNT() считает строки платежей, включая строки, где сумма NULL, тогда как SUM такие значения пропускает.

Если date имеет тип DATE:

SELECT p.date AS payment_date,
       SUM(p.sum) AS total_amount,
       COUNT(*) AS payment_count
FROM payment AS p
GROUP BY p.date
ORDER BY p.date;

Если поле содержит timestamp, сначала получите календарный день в нужном часовом поясе и группируйте по нему. Даты без платежей не появятся: для них нужен календарь дат с LEFT JOIN. Для денег используйте точное представление, например NUMERIC или целые минимальные денежные единицы, не float.

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

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

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

Подробнее