WITH incom_staff AS (
SELECT year(p.payment_date) AS income_year, s.staff_id,
concat(s.last_name, ' ', s.first_name) AS staff, p.amount
FROM payment p
JOIN staff s ON p.staff_id = s.staff_id
)
SELECT
CASE WHEN grouping(i.income_year) = 1 THEN 'Total'
ELSE CAST(i.income_year AS char)
END AS income_year,
CASE WHEN GROUPING(i.staff) = 1 AND GROUPING(i.income_year) = 0 then 'Year total'
WHEN GROUPING(i.staff) = 1 THEN ''
ELSE i.staff
END AS staff,
sum(i.amount) AS total_payments
FROM incom_staff AS i
GROUP BY i.income_year, i.staff WITH ROLLUP
;
show status like 'Last_query_cost';