0

我使用 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: operator does not exist: double precision = boolean

我不知道我做错了什么。我刚刚使用了来自http://www.postgresql.org/docs/8.4/static/functions-conditional.html的语法

4

1 回答 1

2

我认为问题是你的情况:

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 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
于 2013-06-10T05:27:17.640 回答