gpt4 book ai didi

mysql - GROUP BY 和 GROUP_CONCAT - 如何返回正确的值?

转载 作者:行者123 更新时间:2023-11-29 00:52:15 25 4
gpt4 key购买 nike

我有以下查询:

SELECT ev.q1, ev.comments, es.session_number, es.title, CONCAT( np.first_name,  ' ', np.last_name ) AS speaker
FROM `expo_session_eval` ev
LEFT JOIN expo_session es ON es.session_id = ev.session_id
LEFT JOIN expo_session_speaker ess ON ess.session_id = ev.session_id
LEFT JOIN expo_speaker sp ON sp.speaker_id = ess.speaker_id
LEFT JOIN new_people np ON np.id = sp.people_id
GROUP BY CONCAT( np.first_name, ' ', np.last_name )
ORDER BY es.session_number

这会返回如下所示的数据:

session_id  q1  comments    session_number  title               speaker
===================================================================================
169 3 Good! 103 Digital Practices Steve Bullock
169 3 Good! 103 Digital Practices Sheila Bacon
170 1 104 LBS = Location Based Patrick Moorhead

这是正确的,因为在 session_id 169 的 expo_session_eval 中有两条记录,但它是不正确的,因为 q1 和 comments 值不相同。 expo_session_speaker 中有两条记录对应于 session_id 169 - 即这一场 session 有两位发言人。

理想情况下,我希望我的结果看起来像这样:

session_id  q1  comments    session_number  title                  speaker
===============================================================================================
169 3 Good! 103 Digital Practices Steve Bullock, Sheila Bacon
169 5 Great! 103 Digital Practices Steve Bullock, Sheila Bacon
170 1 104 LBS = Location Based Patrick Moorhead

我试过使用 GROUP_CONCAT,但显然我没有正确使用它,因为当我使用这个查询时:

SELECT ev.session_id, ev.q1, ev.comments, es.session_number, es.title, GROUP_CONCAT( CONCAT( np.first_name,  ' ', np.last_name ) ) AS speaker
FROM `expo_session_eval` ev
LEFT JOIN expo_session es ON es.session_id = ev.session_id
LEFT JOIN expo_session_speaker ess ON ess.session_id = ev.session_id
LEFT JOIN expo_speaker sp ON sp.speaker_id = ess.speaker_id
LEFT JOIN new_people np ON np.id = sp.people_id
ORDER BY es.session_number

我明白了:

session_id  q1  comments    session_number  title                  speaker
===============================================================================================
169 3 Good! 103 Digital Practices Steve Bullock,Sheila Bacon,Patrick Moorhead

我需要做什么才能在 session_id 中创建发言人列 group_concat?

@NOAH 的编辑

主表是 expo_session_eval - 每条记录都存储了一个 session_id。这些 ID 来自名为 expo_session 的表。有一个名为 expo_session_speaker 的交叉引用表,它只包含两列 - session_id 和 speaker_id。还有另一个名为 speaker_id 的表,其中包含 speaker_id 和 people_id。 people_id 将该表链接到名为 new_people 的表,该表包含 first_name 和 last_name。

在 expo_session_speaker 中,给定的 session_id 可以有多个记录 - 每个记录对应一个 session 和一个演讲者。因此,要显示给定 session 的所有发言人,您最终会得到多个记录。这就是 group by/group_concat 想法的来源;我需要在该 session 的所有记录中显示给定 session 的所有发言人。因此, session 169 记录 1 的发言人是 Steve Bullock、Sheila Bacon,而 session 169 记录 2 的发言人是相同的,即使两个 session 169 记录的其他选定值都不相同。

(一清二楚,对吧?)

最佳答案

您应该按 session_id 分组(而不是排序)

SELECT ev.session_id, ev.q1, ev.comments, es.session_number, es.title, GROUP_CONCAT(  CONCAT( np.first_name,  ' ', np.last_name ) ) AS speaker
FROM `expo_session_eval` ev
LEFT JOIN expo_session es ON es.session_id = ev.session_id
LEFT JOIN expo_session_speaker ess ON ess.session_id = ev.session_id
LEFT JOIN expo_speaker sp ON sp.speaker_id = ess.speaker_id
LEFT JOIN new_people np ON np.id = sp.people_id
GROUP BY ev.session_id

关于mysql - GROUP BY 和 GROUP_CONCAT - 如何返回正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com