0

find_by_sql を使用してレールで次のクエリを実行しました

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 

その形式のCASEleast(a, b)は、(おそらく倍精度値) を各 WHEN 式と比較して、どれが一致するかを確認しようとします。WHEN は 1 つだけです。

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 に答える