用于创建课程列表的 SQL 查询。通过...分组?
Posted
技术标签:
【中文标题】用于创建课程列表的 SQL 查询。通过...分组?【英文标题】:SQL query for creating course lists. GROUP BY? 【发布时间】:2020-02-08 14:51:52 【问题描述】:我有一个 mysql 表“课程”,我想从中为每个老师输出一个课程列表(见图)。
到目前为止,我想使用 GROUP BY 和 GROUP_CONCAT 作为输出,但到目前为止我失败了。我现在不知道。谁能帮帮我?
【问题讨论】:
如何将这四行标识为“一门课程”?最后两列是如何定义的? 请重新阅读您的问题,并更正此问题:GRPUP BY
,因此创建了edit
的可能性,只是为了这样做......
@GordonLinoff 工作日从 1 到 5(周一、周二...),从 1 到 9 小时(第一个小时、第二个小时...)。老师一次只能教一门课。但是,来自多个班级的学生可以参加一门课程。
【参考方案1】:
如果我理解正确,同一时间(基于最后两列)、同一位老师且名称相同的课程应合并为“课程”。
如果是这种情况,您可以使用两个级别的聚合:
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;
【讨论】:
感谢您的帮助。到目前为止,您的查询有效,并且您已经了解了数据库的设计。 我还有一个问题。而不是 class_id 我想打印类的名称。类名存储在“类”表中。这意味着我需要 INNER JOIN。但不幸的是,查询太复杂了,我无法理解。我必须在哪里插入它? @Lukas 。 . .我建议你问一个新的问题。这似乎回答了您在此处提出的问题。以上是关于用于创建课程列表的 SQL 查询。通过...分组?的主要内容,如果未能解决你的问题,请参考以下文章