Загрузка данных


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;