Oracle SQL入门:关联两表统计讲师授课章节数并排序
Oracle SQL 关联查询统计讲师授课章节数
假设两张表的关联字段为 Instructor.INSTRUCTOR_ID 和 Section.INSTRUCTOR_ID,以下是两种业务场景的正确SQL写法:
场景1:仅统计有授课记录的讲师
SELECT i.FIRST_NAME, i.LAST_NAME, COUNT(s.SECTION_ID) AS section_count FROM Instructor i JOIN Section s ON i.INSTRUCTOR_ID = s.INSTRUCTOR_ID GROUP BY i.FIRST_NAME, i.LAST_NAME ORDER BY section_count DESC;
场景2:统计所有讲师(含未授课的,章节数显示0)
SELECT i.FIRST_NAME, i.LAST_NAME, COUNT(s.SECTION_ID) AS section_count FROM Instructor i LEFT JOIN Section s ON i.INSTRUCTOR_ID = s.INSTRUCTOR_ID GROUP BY i.FIRST_NAME, i.LAST_NAME ORDER BY section_count DESC;
关键说明:
- 内连接(
JOIN)仅返回两表匹配的记录,即只统计有授课记录的讲师;左连接(LEFT JOIN)会保留所有讲师数据,未授课讲师的章节数统计为0。 GROUP BY必须包含所有非聚合字段(这里的FIRST_NAME和LAST_NAME),否则Oracle会抛出语法错误。- 用
COUNT(s.SECTION_ID)统计章节数比COUNT(*)更严谨,可避免因关联字段为NULL导致的统计偏差。 ORDER BY section_count DESC实现按章节总数降序排列。
内容的提问来源于stack exchange,提问作者lexytaylormb
相关产品推荐
相关产品推荐

