首页 > 解决方案 > SQL 中的 CASE 命令

问题描述

我需要你的帮助。我用 SQL 编写了一些代码,但 CASE 命令有一些问题。我想为 > 90 的成绩输出 1,为 > 80 的成绩输出 2,为 > 70 的成绩输出 3,否则为 4。在我仔细检查了我的代码后,我仍然无法修复它。表中的所有记录都有 4 个值(在 ELSE 命令中)。请帮我。非常感谢 !

CREATE TABLE student_grades 
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    number_grade INTEGER,
    fraction_completed REAL
);

INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Winston", 90, 0.805);
INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Winnefer", 95, 0.901);
INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Winsteen", 85, 0.906);
INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Wincifer", 66, 0.7054);
INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Winster", 76, 0.5013);
INSERT INTO student_grades (name, number_grade, fraction_completed)
    VALUES ("Winstonia", 82, 0.9045);

SELECT 
    name, number_grade, 
    ROUND(fraction_completed * 100,0) "percent_completed" 
FROM
    student_grades;

SELECT 
    number_grade 
FROM
    student_grades 
ORDER BY
    number_grade DESC;

SELECT 
    name, number_grade, 
    CASE number_grade
       WHEN number_grade >= 90 THEN 1 
       WHEN number_grade >= 80 THEN 2 
       WHEN number_grade >= 70 THEN 3 
       ELSE 4
    END AS "letter_grade"
FROM 
    student_grades
ORDER BY
    number_grade DESC;

结果是:

在此处输入图像描述

标签: sqlcase

解决方案


你混合了两种不同的使用方式CASE

一种方法是:

CASE columnname
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
END

另一个是:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
END

如果你正在测试一个条件,你不应该在 之后有一个列名CASE,因为第一种形式实际上只是缩写:

CASE
    WHEN columnname = value1 THEN result1
    WHEN columnname = value2 THEN result2
    ...
END

所以你的代码相当于:

CASE
    WHEN number_grade = number_grade >= 90 THEN 1
    WHEN number_grade = number_grade >= 80 THEN 2
    WHEN number_grade = number_grade >= 70 THEN 3
    ELSE 4
END

正确的语法是:

CASE
    WHEN number_grade >= 90 THEN 1 
    WHEN number_grade >= 80 THEN 2 
    WHEN number_grade >= 70 THEN 3 
    ELSE 4
END as "letter_grade"

推荐阅读