如何基于现有数据库结构统计各课程组中学习英语的学生数量
现有表结构合理性及统计方案
你当前设计的数据库结构完全可以满足统计需求,无需调整,该结构符合关系型数据库设计规范,各实体及关联关系划分清晰。
你需要的统计逻辑本质是筛选所有关联英语的课程组,按课程组分组统计关联的学生报名记录数,由于多对多关联表GroupStudent中每条记录对应1名学生在1个课程组的报名关系,天然支持同一名学生报名多个课程组时分别计入对应组的统计结果。
以下是可供参考的统计SQL,假设各表关键字段命名如下(如果你的实际字段名不同,调整对应字段即可):
languages表:主键id,语言名称字段language_namecourseGroups表:主键id,关联语言的外键language_id,关联教师的外键teacher_id,可选字段group_name(课程组名称)GroupStudent表:关联课程组的外键course_group_id,关联学生的外键student_idteachers表:主键id,可选字段teacher_name(教师姓名)
SELECT cg.id AS 课程组ID, cg.group_name AS 课程组名称, t.teacher_name AS 授课教师, COUNT(gs.student_id) AS 组内学生数 FROM courseGroups cg -- 关联语言表筛选英语课程 INNER JOIN languages l ON cg.language_id = l.id -- 关联教师表,不需要展示教师信息可删除这段关联 INNER JOIN teachers t ON cg.teacher_id = t.id -- 关联报名关系表统计学生数,LEFT JOIN可保留0人报名的英语课程组 LEFT JOIN GroupStudent gs ON cg.id = gs.course_group_id WHERE l.language_name = '英语' -- 按课程组维度分组统计 GROUP BY cg.id, cg.group_name, t.teacher_name
如果不需要保留0人报名的空课程组,把LEFT JOIN GroupStudent改成INNER JOIN GroupStudent即可。
内容的提问来源于stack exchange,提问作者Стопчак Олег
相关产品推荐
相关产品推荐

