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

在SSMS中实现可汗学院Gradebook Challenge SQL代码遇阻求指导

问题分析与解决

你的代码核心问题有两个:

  1. 按**具体分数Grade**分组,这会把每个不同的分数单独分成一组,和可汗学院挑战要求的「统计各字母等级的学生人数」目标不符;
  2. SQL Server不允许在GROUP BY中直接引用SELECT里定义的列别名,所以即使逻辑正确,也会报错。

修改方案一:重复CASE表达式到GROUP BY

直接将SELECT中的CASE逻辑复制到GROUP BY中,同时去掉不需要的Grade列(因为我们要按字母等级聚合,而非具体分数):

SELECT 
    COUNT(*) AS StudentCount,
    CASE
        WHEN Grade > 90 THEN 'A'
        WHEN Grade > 80 THEN 'B'
        WHEN Grade > 70 THEN 'C'        
        ELSE 'F'
    END AS LetterGrade
FROM StudentsGrades
GROUP BY 
    CASE
        WHEN Grade > 90 THEN 'A'
        WHEN Grade > 80 THEN 'B'
        WHEN Grade > 70 THEN 'C'        
        ELSE 'F'
    END

修改方案二:使用CTE(更易读)

先用CTE(公共表表达式)生成包含字母等级的中间结果,再对中间结果分组统计,避免重复写CASE逻辑:

WITH GradesWithLetter AS (
    SELECT 
        CASE
            WHEN Grade > 90 THEN 'A'
            WHEN Grade > 80 THEN 'B'
            WHEN Grade > 70 THEN 'C'        
            ELSE 'F'
        END AS LetterGrade
    FROM StudentsGrades
)
SELECT 
    COUNT(*) AS StudentCount,
    LetterGrade
FROM GradesWithLetter
GROUP BY LetterGrade

以上两种方案都能得到各字母等级的学生人数统计结果,和可汗学院的挑战要求一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:10:23