Postgresql - [新手警报]在SQL查询中使用案例和计数

时间:2018-03-27 21:42:26

标签: postgresql count case

我有一个表格,其中包含以下列:

表名:学生

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中的那个。

有人可以帮助我并让我走上正轨吗?谢谢。

1 个答案:

答案 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