我有一个表格,其中包含以下列:
表名:学生
ID | Result
1 | 0
4 | 1
2 | 0
3 | 1
4 | 1
1 | 1
结果可以是0或1,分别表示“失败”或“通过”。该表可以有多个相同ID的条目(同一个学生)。
我的目标是创建一个名为“status”的视图,如下所示:
查看姓名:状态
ID | Final_Result
1 | Failed
2 | Failed
3 | Passed
4 | Passed
也就是说,如果学生即使在一个科目中也失败了,他的Final_Result应该是“失败”。否则它将是“通过”。
我是Postgresql的新手,让我的脚湿透了。我试过了
CREATE OR REPLACE View status AS
SELECT ID,
Result,
CASE
WHEN 0 THEN 'Failed'
ELSE 'Passed'
END AS Final_Result
FROM students
GROUP BY ID;
但这显然不对。我想我需要使用COUNT函数来计算0的数量,然后执行CASE语句,但我不熟悉SQL中的那个。
有人可以帮助我并让我走上正轨吗?谢谢。
答案 0 :(得分:0)
请勿使用 COUNT ,请使用agregate函数 bool_and (结果= 1 )
SELECT id,
CASE WHEN bool_and(Result=1) THEN 'Passed' ELSE 'Failed' END AS Final_Result
FROM students
GROUP BY id
您的COUNT和SUM
示例SELECT id,
CASE WHEN COUNT()=SUM(Result) THEN 'Passed' ELSE 'Failed' END AS Final_Result
FROM students
GROUP BY id