SELECT
month_data.month AS 'Месяц',
month_data.contract_count AS 'Количество договоров',
month_data.total_sum AS 'Общая сумма',
month_data.average_sum AS 'Средняя стоимость',
ROUND(
SUM(month_data.total_sum) OVER (
ORDER BY month_data.month
), 2
) AS 'Накопительный итог'
FROM (
SELECT
DATE_FORMAT(d.data_zaklucheniya, '%Y-%m') AS month,
COUNT(d.id_dogovor) AS contract_count,
ROUND(
SUM(
c.cena * 0.001 *
DATEDIFF(d.data_vozvrata, d.data_vidachi)
), 2
) AS total_sum,
ROUND(
AVG(
c.cena * 0.001 *
DATEDIFF(d.data_vozvrata, d.data_vidachi)
), 2
) AS average_sum
FROM dogovor d
JOIN car c ON d.id_car = c.id_car
WHERE d.data_zaklucheniya >= '2023-01-01'
AND d.data_zaklucheniya < '2024-01-01'
GROUP BY
YEAR(d.data_zaklucheniya),
MONTH(d.data_zaklucheniya)
) AS month_data
ORDER BY month_data.month;