SQL Server中GROUP BY使用问题:如何统计学员学分及课程情况
解决SQL Server中GROUP BY的学员统计需求
嘿,我来帮你搞定这个学员信息的统计查询!根据你给出的表结构和期望结果,咱们可以结合GROUP BY和条件聚合函数来完成。
需求拆解
先理清楚每个统计字段的逻辑:
- Total_Credits:只累加该学员所有通过课程(
Passed='YES')的学分,未通过的课程学分不计入 - Courses:该学员修读的课程总数(无论是否通过)
- Passed:该学员通过的课程数量
- Not_Passed:该学员未通过的课程数量
实现Query
SELECT Name AS Alumn, SUM(CASE WHEN Passed = 'YES' THEN Credits ELSE 0 END) AS Total_Credits, COUNT(Course) AS Courses, SUM(CASE WHEN Passed = 'YES' THEN 1 ELSE 0 END) AS Passed, SUM(CASE WHEN Passed = 'NO' THEN 1 ELSE 0 END) AS Not_Passed FROM 学员表 GROUP BY Alumn_ID, Name ORDER BY Name;
代码解释
- GROUP BY Alumn_ID, Name:因为
Alumn_ID是学员的唯一标识(避免重名学员统计错误),同时我们需要显示学员姓名,所以把这两个字段放在GROUP BY里。 - Total_Credits的计算:用
CASE判断课程是否通过,通过的话取对应的Credits值,否则取0,再用SUM累加得到总学分。 - Courses的计算:直接用
COUNT(Course)统计每个学员的课程记录数,就是修读的课程总数。 - Passed和Not_Passed的计算:同样用
CASE做条件判断,符合条件的返回1,否则返回0,再用SUM统计数量,就得到了通过/未通过的课程数。
执行这条Query后,就能得到你期望的统计结果啦!
内容的提问来源于stack exchange,提问作者Dog
相关产品推荐
相关产品推荐

