2013-06-10 2 views
0

나는 다음과 같은 쿼리는 find_by_sqlPG : 오류 : 오류 : 연산자가 존재하지 않습니다 배정 밀도 = 부울

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 : 오류로 오류가 점점 오전 : 오류 : 연산자 존재하지 않습니다 : double precision = boolean

내가 뭘 잘못하고 있는지 모르겠다. 난 그냥 문제가 당신의 CASE입니다 내 생각

+1

'유형 = abc' 내가 생각 범인입니다 :

당신은 아마 CASE의 다른 형태를 원한다. 'abc' 란 무엇입니까? – karthikr

+0

유형은 다른 텍스트 일 ​​수 있습니다. abc는 샘플 일뿐입니다. 유형에 따라 레코드를 가져 오려고합니다. – logesh

답변

1

http://www.postgresql.org/docs/8.4/static/functions-conditional.html에서이 구문을 사용 :

CASE의 형태는 언제 표현의 각각 (아마도 배정 밀도 값) least(a, b)을 비교하려고하는 것입니다

CASE LEAST(a,b) 
WHEN LEAST(a,b) < 1.0 then 1.0 
ELSE 1-LEAST(a,b) 
END 
일치하는 것을보기.

WHEN LEAST(a, b) < 1.0 

하고는 부울 (least(a, b) < 1.0)과 PostgreSQL없이 말한다와 배정 밀도 값 (least(a, b))을 비교하기 위해 노력하고, 그래서 부울입니다 : 당신은 단 하나의 WHEN 있습니다.

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

때 (LEAST A, B) <1.0 다음 1.0 ELSE 1 LEAST 모델에서, b) END (여기서 TYPE = ABC "이"@val = Model.find_by_sql (" CASE 를 선택 가능하며) "가능한 한 어떻게 배열 값을 얻을 수 있습니까? – logesh

+0

어떤 값이 있습니까? 함수형'Model' 인스턴스가 SELECT에'models. *'을 던지기를 원한다면 CASE 표현식에 별명을 부여하여 객체에서 참조 할 수 있습니다. –

+0

동일한 쿼리에서 배열의 합계를 찾아야합니다. 예를 들어 이전 쿼리에서 [1.0, 0.9, 1.0, 1.0, 0.7]과 같은 값을 반환해야한다면 그 값을 더하고 싶습니다. 내가 어떻게 할 수 있니? – logesh

관련 문제