SQL统计教师授课数:如何让未授课教师返回COUNT零值
解决教师唯一课程统计(含未授课教师返回0)的方案
嗨,这个问题我之前做教务系统统计的时候也碰到过!你之前的思路之所以漏了未授课的教师,是因为从授课记录出发做统计,相当于只筛选了有授课记录的教师,自然拿不到那些没开课的人。核心解决思路就是从教师表出发做左连接,确保所有教师都被纳入统计范围。
具体实现步骤
假设你有两张核心表:
teachers:存储所有教师的基础信息(字段:id,name)teaches:存储授课记录(就是你给出的包含id,name,course_id,sec_id,semester,year的表)
直接用下面的SQL就能搞定:
SELECT t.id AS teacher_id, t.name AS teacher_name, COUNT(DISTINCT tc.course_id) AS unique_course_count FROM teachers t LEFT JOIN teaches tc ON t.id = tc.id -- 注意:如果你的授课表中教师ID字段名是`teacher_id`,这里要改成`t.id = tc.teacher_id` GROUP BY t.id, t.name;
关键逻辑解释
- LEFT JOIN的作用:从
teachers表取出所有教师记录,哪怕teaches表中没有对应授课记录,这时候该教师的course_id会是NULL - COUNT(DISTINCT ...):
DISTINCT保证同一教师的同一门课程,不管开了多少学期/多少班级,都只统计1次,满足“唯一课程数量”的要求COUNT函数会自动忽略NULL值,所以没有授课记录的教师,统计结果就是0,完美符合你的需求
如果你的teaches表本身有重复的授课记录(比如同一教师同一课程的多条重复条目),也不用提前单独构建唯一课程表,COUNT(DISTINCT)已经帮你去重了,一步到位~
内容的提问来源于stack exchange,提问作者420fedoras
相关产品推荐
相关产品推荐

