You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让MySQL的SELECT COUNT()统计并返回无授课记录的讲师数据?

解决MySQL统计所有讲师授课数量的问题

你当前的查询只返回有授课记录的讲师,核心问题出在连接类型和分组逻辑上,以下是修正方案:

关键修改点

  • 改用左外连接(LEFT JOIN):原查询用的JOIN是内连接,只会保留两张表匹配的记录。换成LEFT JOIN SECTION后,INSTRUCTOR表的所有讲师都会被返回,哪怕SECTION里没有对应的授课记录。
  • 修正GROUP BY分组字段:原语句按SECTION.INSTRUCTOR_ID分组,无授课的讲师这个字段是NULL,会导致分组错误;同时别名不能直接用于GROUP BY。应该按INSTRUCTOR表的唯一标识(比如INSTRUCTOR_ID)以及SELECT里的非聚合字段分组,符合SQL标准。
  • COUNT函数保持有效:COUNT(SECTION.INSTRUCTOR_ID)会自动忽略NULL值,无授课的讲师会统计出0,正好符合需求。

修正后的完整SQL

SELECT 
    CONCAT(INSTRUCTOR.INSTRUCTOR_ID, ' ', INSTRUCTOR.FIRST_NAME, ' ', INSTRUCTOR.LAST_NAME) AS Instructor,
    CONCAT(SUBSTRING(INSTRUCTOR.INSTRUCTOR_SSN, 1, 3), '-', SUBSTRING(INSTRUCTOR.INSTRUCTOR_SSN, 4, 2), '-', SUBSTRING(INSTRUCTOR.INSTRUCTOR_SSN, 6, 4)) AS 'Instructor SSN',
    COUNT(SECTION.INSTRUCTOR_ID) AS '# of Sections'
FROM INSTRUCTOR
LEFT JOIN SECTION
    ON INSTRUCTOR.INSTRUCTOR_ID = SECTION.INSTRUCTOR_ID
GROUP BY INSTRUCTOR.INSTRUCTOR_ID, Instructor, 'Instructor SSN';

如果你的MySQL版本支持仅按主键分组(关闭ONLY_FULL_GROUP_BY或使用宽松模式),也可以简化GROUP BY为GROUP BY INSTRUCTOR.INSTRUCTOR_ID,因为主键唯一确定其他字段的值。

内容的提问来源于stack exchange,提问作者Zachary Tucker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:12:12