SELECT race.Category,
GROUP_CONCAT(CASE WHEN race.totaltime = cte.totaltime THEN race.name END) total,
GROUP_CONCAT(CASE WHEN race.s1time = cte.s1time THEN race.name END) s1,
GROUP_CONCAT(CASE WHEN race.s1time = cte.s2time THEN race.name END) s2,
GROUP_CONCAT(CASE WHEN race.s1time = cte.s3time THEN race.name END) s3,
GROUP_CONCAT(CASE WHEN race.s1time = cte.s4time THEN race.name END) s4
FROM race, ( SELECT Category,
MIN(totaltime) totaltime,
MIN(s1time) s1time,
MIN(s2time) s2time,
MIN(s3time) s3time,
MIN(s4time) s4time
FROM race
GROUP BY Category ) cte
WHERE race.Category = cte.Category
GROUP BY race.Category