#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()
.