Два результата в строке с двумя столбцами и группой

#mysql #sql

#mysql #sql

Вопрос:

Я пытаюсь смешать несколько результатов в одной строке

Вот пример данных:

 TOPICS
    topicID   state    title
    1           A     'Hello'
    1           B     'Bye'
    2           A     'Great'
  

И смешанный с:

 STUDENTS
        topicID   studentID
        1            23
        1            27
        2            33
        2            40
  

Я хочу этот результат:

 Topic     A         B      Students
1      'Hello'    'Bye'     23,27
2      'Great'     null     33,40
  

Теперь я правильно получаю пользователей, используя GROUP_CONCAT (ОТДЕЛЬНЫЙ РАЗДЕЛИТЕЛЬ ИДЕНТИФИКАТОРОВ студентов ‘,’) в SELECT, но я не могу использовать его снова. Я пробовал CASE, но безуспешно.

Комментарии:

1. Рассмотрите проблемы с отображением данных в коде приложения

Ответ №1:

Вы можете использовать условную агрегацию и коррелированный подзапрос:

 select t.topicid,
       max(case when t.state = 'A' then t.title end) as a,
       max(case when t.state = 'B' then t.title end) as b,
       (select group_concat(s.studentid)
        from students s
        where s.topicid = t.topicid
       ) as students
from topics t
group by topicid;
  

Коррелированный подзапрос устраняет необходимость в group_concat(distinct) , что дороже, чем просто group_concat() .