sql - 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;
结果是:
解决方案
你混合了两种不同的使用方式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"
推荐阅读
- reactjs - 仅获取前 x 个元素 JavaScript / React
- c++ - 将模板类的实例添加到向量 (C++)
- java - 锁定文件系统上的并发访问
- html - 如何将 :hover 添加到导航栏上的图像?
- javascript - 带有 Javascript 和 MYSQL 的 Springboot
- angular - 如何在Angular 10中将字符串变量扩展为html内容?
- cocos2d-x - 带有 box2d 联系人监听器的 cocos2dx 不起作用
- android - 在特定片段中隐藏工具栏(在 appbar 布局内)
- c - 从 C 系统命令打开 vim
- haskell - Haskell,实例和类型类之间的类型匹配问题