I am trying to mix multiple results on a single line
Here the data example:
x
TOPICS
topicID state title
1 A 'Hello'
1 B 'Bye'
2 A 'Great'
And mixed with:
STUDENTS
topicID studentID
1 23
1 27
2 33
2 40
I want this result:
Topic A B Students
1 'Hello' 'Bye' 23,27
2 'Great' null 33,40
Now I correctly receive users using GROUP_CONCAT(DISTINCT studentID SEPARATOR ‘,’) in SELECT but i can’t use it again. I have tried CASE but have not succeeded.
Advertisement
Answer
You can use conditional aggregation and a correlated subquery:
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;
The correlated subquery eliminates the need for group_concat(distinct)
, which is more expensive than just group_concat()
.