sql - 带有 THEN 1 THEN 0 ELSE 0 的 PostgreSQL SUM CASE 表达式

标签 sql postgresql expression case

在研究我的 CASE 表达式问题的答案时,我无法完全找到我要找的东西。目的是对“事件”帐户的出现次数进行求和。但是,在查看结果后,似乎有一组我不想包含在我的 SUM 值中的事件帐户参数。这是原始的 SUM CASE:

 sum(
    CASE
        WHEN (type_txt = 'ACCOUNT'::text AND status = 'ACTIVE' THEN 1
        ELSE 0
    END) AS accounts_actv

但是,我修改了代码以在不应计算活跃帐户的特殊情况下计算:

 sum(
    CASE
        WHEN (type_txt = 'ACCOUNT' AND status = 'ACTIVE' THEN 1
        WHEN (type_txt = 'ACCOUNT' AND status = 'ACTIVE' AND code = 483 AND open_date < CURRENT_DATE) THEN 0
        ELSE 0
    END) AS accounts_actv

我认为,THEN 1 ELSE 0 不能有 THEN 条件和 0 ---- 所以我想弄清楚如何不在 SUM 中包含此类帐户

最佳答案

CASE 返回第一个(从上到下)THEN 表达式的值,该表达式的 WHEN 表达式的计算结果为 true (和 ELSE 如果没有匹配)。由于您的第一个 WHEN 在第二个为真的情况下也为真,因此选择第一个而不是第二个。在 CASE 中,始终将较窄的 WHEN 放在较窄的之前。

CASE
    WHEN (type_txt = 'ACCOUNT' AND status = 'ACTIVE' AND code = 483 AND open_date < CURRENT_DATE) THEN 0
    WHEN (type_txt = 'ACCOUNT' AND status = 'ACTIVE' THEN 1
    ELSE 0
END

关于sql - 带有 THEN 1 THEN 0 ELSE 0 的 PostgreSQL SUM CASE 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272919/

相关文章:

php - Mysql : JOIN 2 table , 其中一项SUM不正确

sql - PostgreSQL 查询和数据缓存

mysql - 左连接无法正常工作

postgresql - 在 Postgresql 中按 DateTime 的日期分组

java - 使用 Jooq 插入查询是否可能?

sql - PostgreSQL 选择连接

c# - c#中的表达式和委托(delegate)

c# - 在 C# 中替换正则表达式字符串

eclipse - 更改 eclipse 的快速查看 View 颜色

Entity Framework 中的 Postgresql 表继承