I think that 80_driversInfo has a shorter, non-cursor-dependent solution. Something like this:
CREATE PROCEDURE solution()
BEGIN
ALTER TABLE inspections CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';
SELECT summary
FROM (
SELECT CONCAT(' Total miles driven by all drivers combined: ',
SUM(miles_logged)
) summary, '0' r
FROM inspections
UNION
SELECT summary, driver_name r
from (SELECT summary, driver_name
FROM (SELECT CONCAT(' Name: ', driver_name,
'; number of inspections: ',
COUNT(*),
'; miles driven: ',
SUM(miles_logged)
) summary, driver_name
FROM inspections
GROUP BY driver_name
ORDER BY driver_name
) x
) y
UNION
SELECT summary, CONCAT(driver_name, '2') r
FROM (SELECT CONCAT(' date: ', date, '; miles covered: ', miles_logged) summary,
driver_name
FROM inspections
GROUP BY driver_name, date, miles_logged
order BY driver_name, date
) z
) t
Order BY r;
END
I think that 80_driversInfo has a shorter, non-cursor-dependent solution. Something like this: