首页 > 解决方案 > 在 Postgres 中不能匹配布尔和双精度的案例类型

问题描述

查询:如果 b 是信用(即 0 或大于 0),那么值应该是 a。否则 (a+b),负值应为零。

我的查询条件是

Case when(b>=0) Then (a) Else (SUM(a+b)>0 End as Difference

但我收到了这个错误

Error : CASE Types boolean and double precision cannot be matched

如果有人协助查询解决方案,将非常高兴。我使用 Postgres 作为数据库。

标签: postgresql

解决方案


您的表达式中有语法错误;左括号和右括号的数量不匹配。

Buta是一个数字,whilea + b > 0是一个布尔值(“true”或“false”),所以 PostgreSQL 抱怨它无法确定你的 case 表达式应该是什么类型。

根据您的描述,我会使用

CASE WHEN b >= 0
     THEN a
     ELSE greatest(a + b, 0)
END

推荐阅读