Если я правильно понимаю, уроки, которые проводятся одновременно (на основе последних двух столбцов) и для одного и того же учителя и имеют одинаковое имя, должны объединяться в «курс».
Если это В этом случае вы можете использовать два уровня агрегации:
select group_concat(ids) as ids,
group_concat(class_id) as class_ids,
teacher, name, weekday_hours
from (select l.class_id, l.teacher_id, l.name,
group_concat(l.weekday, ':', l.hour order by l.weekday, l.hour) as weekday_hours,
group_concat(l.id order by l.id) as ids
from lessons l
group by l.class_id, l.teacher_id, l.name
) l
group by teacher, name, weekday_hours;