很确定这是一个很简单的问题:
我需要为一个学生创建一个考试结果表,但它需要满足以下条件:如果该学生被授予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/

10-15 19:50