PG ::错误:错误:运算符不存在:double precision = boolean

时间:2013-06-10 05:15:55

标签: ruby-on-rails ruby-on-rails-3 postgresql

我使用find_by_sql

在rails中执行了以下查询
select LEAST(a,b) as min_value ,
CASE LEAST(a,b) 
WHEN LEAST(a,b) < 1.0 
then 1.0 
ELSE 1-LEAST(a,b) 
END 
from model where type=abc

但我得到的错误是PG :: Error:ERROR:运算符不存在:double precision = boolean

我不知道我做错了什么。我刚从http://www.postgresql.org/docs/8.4/static/functions-conditional.html

使用了这种语法

1 个答案:

答案 0 :(得分:1)

我认为问题在于你的情况:

CASE LEAST(a,b) 
WHEN LEAST(a,b) < 1.0 then 1.0 
ELSE 1-LEAST(a,b) 
END 

CASE的这种形式将尝试将least(a, b)(可能是双精度值)与每个WHEN表达式进行比较,以查看哪一个匹配。你只有一个WHEN:

WHEN LEAST(a, b) < 1.0

这是一个布尔值,所以你试图将双精度值(least(a, b))与布尔值(least(a, b) < 1.0)进行比较,而PostgreSQL则说没有。

您可能想要其他形式的CASE:

case
when least(a, b) < 1.0 then 1.0
else 1 - least(a, b)
end