SQL: INNER JOIN для двух уровней агрегации - PullRequest
0 голосов
/ 08 февраля 2020

Мой вопрос касается запроса SQL, который возвращает список курсов (см. Изображение).

Вместо class_id я хотел бы напечатать название класса. Имя класса хранится в таблице classes. Я уже попробовал его с INNER JOIN, но, к сожалению, пока не нашел решения.

See image

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;

1 Ответ

0 голосов
/ 08 февраля 2020

Вы хотите join в подзапросе, а затем обработать name так же, как class_id:

select group_concat(ids) as ids,
       group_concat(class_name) as class_names,
       teacher, name, weekday_hours
from (select l.class_id, c.name as class_name,
             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 join
           classes c
           on l.class_id = c.id
      group by l.class_id, c.name, l.teacher_id, l.name
     ) l
group by teacher, name, weekday_hours;
...