【问题标题】:Postgresql - [Novice alert] Using case and count in SQL queryPostgresql - [新手提醒] 在 SQL 查询中使用大小写和计数
【发布时间】:2018-03-27 21:42:26
【问题描述】:

我有一个包含以下列的表格:

表名:学生

ID | Result
1  | 0
4  | 1
2  | 0
3  | 1
4  | 1
1  | 1

Result 可以是 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 中的那个。

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

【问题讨论】:

  • 类似case min(Result) when 0 then 'Failed' else 'Passed' end as Final_Result。该组看起来不错
  • 这就像一个魅力。谢谢!

标签: postgresql count case


【解决方案1】:

不要使用COUNT,使用聚合函数bool_and(Result=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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多