用于创建课程列表的 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 查询。通过...分组?的主要内容,如果未能解决你的问题,请参考以下文章

SQL group by分组查询

如何将 SQL 查询中一个字段的值用于 Oracle Apex 上另一个字段的值列表?

sql server——分组查询(方法和思想)

Oracle_group by分组查询_深入

sql语句分组/排序/计算总数/连接等sql语句书写

SQL 课程