很确定这是一个很简单的问题:
我需要为一个学生创建一个考试结果表,但它需要满足以下条件:如果该学生被授予70%或以上的分数,则结果将显示为“优异”,至少50%但低于70%的分数将显示为“及格”,低于50%的分数将显示为“不及格”。如果学生没有参加考试,则结果显示为“未参加”。
我的代码有问题,但我似乎无法纠正:
CREATE VIEW results_table
AS SELECT entry.excode, sname, student.sno, entry.egrade, result AS entry
FROM student
JOIN entry
ON student.sno = entry.sno
GROUP BY entry.excode, sname, student.sno, entry.egrade, result
SELECT result
CASE result
WHEN entry.egrade >= 70 THEN 'Distinction'
WHEN entry.egrade >= 50 THEN 'Pass'
WHEN entry.egrade < 50 THEN 'Fail'
WHEN entry.egrade = NULL THEN 'Not Taken'
END;
ORDER BY entry.excode,sname
有人能告诉我哪里出错了吗?
最佳答案
有两种类型的SQLCASE
语句,as documented for PostgreSQL here:CASE WHEN condition THEN result ELSE default END
CASE expression WHEN value THEN result ELSE default END
第一个表单测试一系列(不相关的)条件,并返回第一个条件的结果,如果第一个条件为true,则返回ELSE
。第二种形式是针对单个值测试多个条件的简写;CASE x WHEN y THEN 'y' WHEN z THEN 'z' END
是针对CASE WHEN x = y THEN 'y' WHEN x = z THEN 'z' END
的简写。
在您的代码中,您混淆了这两个语法;您不能使用简写,因为您正在做比条件中的=
更复杂的事情,所以您需要省略单词result
:
CASE
WHEN entry.egrade >= 70 THEN 'Distinction'
WHEN entry.egrade >= 50 THEN 'Pass'
WHEN entry.egrade < 50 THEN 'Fail'
WHEN entry.egrade IS NULL THEN 'Not Taken'
END
(注:我也将
= NULL
改为IS NULL
,因为没有值“等于”NULL
,因为它意味着“我们不知道值等于什么”。)然后,您需要将其放入
SELECT
查询中,并将其放在选择普通列的同一位置。所以从这个简单的查询开始。。。
SELECT
entry.egrade as result
FROM
entry;
…您可以将
CASE
语句如下:SELECT
CASE
WHEN entry.egrade >= 70 THEN 'Distinction'
WHEN entry.egrade >= 50 THEN 'Pass'
WHEN entry.egrade < 50 THEN 'Fail'
WHEN entry.egrade IS NULL THEN 'Not Taken'
END as result
FROM
entry;
关于postgresql - 如何使用案例制作评分系统?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27361675/