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


SELECT
    u.familiya AS `Фамилия`,
    u.imya AS `Имя`,
    u.otchestvo AS `Отчество`,

    ds.contract_count AS `Количество договоров`,
    ds.contract_sum AS `Сумма договоров`,

    fs.fine_count AS `Количество штрафов`,
    fs.fine_sum AS `Сумма штрафов`

FROM users u

JOIN (
    SELECT
        d.id_user,
        COUNT(DISTINCT d.id_dogovor) AS contract_count,

        ROUND(
            SUM(
                c.cena * 0.001 *
                DATEDIFF(d.data_vozvrata, d.data_vidachi)
            ),
            2
        ) AS contract_sum

    FROM dogovor d

    JOIN car c
        ON d.id_car = c.id_car

    GROUP BY d.id_user

    HAVING COUNT(DISTINCT d.id_dogovor) > 2

) ds ON u.id_user = ds.id_user

JOIN (
    SELECT
        d.id_user,
        COUNT(DISTINCT s.id_strafa) AS fine_count,
        SUM(vs.stoimost) AS fine_sum

    FROM dogovor d

    JOIN shtrafi s
        ON d.id_dogovor = s.id_dogovor

    JOIN vidy_shtrafov vs
        ON s.id_shtraf = vs.id_shtraf

    GROUP BY d.id_user

) fs ON u.id_user = fs.id_user

ORDER BY fs.fine_sum DESC;