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

SQL Server查询需求:统计各课程得A学生数并返回所有课程

问题分析与修正方案

原查询存在几个关键问题,导致无法展示得A人数为0的课程:

  • LEFT JOIN语法错误:正确写法是LEFT JOIN Grades B ON A.Course_ID = B.Course_ID,你把on的位置写错了
  • WHERE子句过滤了无匹配的课程:WHERE B.Grades = 'A'会直接剔除左连接中没有学生得A的课程(此时B的所有字段为NULL,不满足该条件)
  • GROUP BY包含多余字段:B.Grades不需要出现在分组里,我们只需要按课程维度分组

修正后的查询写法(两种可选)

方法一:将筛选条件移至JOIN的ON子句

SELECT A.Title,
       COUNT(B.Course_ID) AS [Number of A's]
FROM Courses A 
LEFT JOIN Grades B ON A.Course_ID = B.Course_ID AND B.Grades = 'A'
GROUP BY A.Title, A.Course_ID
ORDER BY A.Course_ID

左连接仅匹配得A的记录,无匹配的课程会被保留,COUNT(B.Course_ID)会自动忽略NULL值,最终得到0的计数结果。

方法二:使用CASE语句统计符合条件的记录

SELECT A.Title,
       COUNT(CASE WHEN B.Grades = 'A' THEN 1 END) AS [Number of A's]
FROM Courses A 
LEFT JOIN Grades B ON A.Course_ID = B.Course_ID
GROUP BY A.Title, A.Course_ID
ORDER BY A.Course_ID

先保留所有课程的成绩记录,通过CASE仅标记得A的情况,不满足条件时CASE返回NULL,COUNT会自动忽略这些NULL值,最终得到正确的得A人数统计。

注:GROUP BY中加入A.Course_ID是为了避免不同课程出现同名Title时的分组错误,同时保证ORDER BY能正常按课程ID排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:24:54