在研究我的 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/