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;