2013-10-20 2 views
1

postgresql 쿼리에서 몇 가지 가능한 결과 범위가있는 긴 하위 쿼리 (많은 하위 하위 쿼리 포함)가 있고 쿼리 결과는 특정 범위에 속하는 숫자 여야합니다.postgresql에서 긴 하위 쿼리를 반복하지 않으려면 어떻게해야합니까?

내가 원했던 것은 긴 하위 쿼리를 여러 번 반복하지 않는 것입니다.

SELECT CASE WHEN (result_of_very_long_subquery) BETWEEN 0 AND 3 THEN 1 
WHEN (result_of_very_long_subquery) BETWEEN 3 AND 5 THEN 2 
WHEN (result_of_very_long_subquery) BETWEEN 6 AND 10 THEN 3 
WHEN (result_of_very_long_subquery) BETWEEN 11 AND 25 THEN 
ELSE 5 END 

해결책은 하나의 쿼리 여야합니다.

답변

1

사용하십시오 Common Table Expressions (내 말은 임시 테이블을 생성 할 수있는 방법 등 없음) -이 구체화 된 선택을 사용하여 내부적으로

postgres=# WITH x AS (SELECT 10 AS y, pg_sleep(2)) 
       SELECT y FROM x 
       UNION ALL 
       SELECT y FROM x 
       UNION ALL 
       SELECT y FROM x 
    y 
──── 
10 
10 
10 
(3 rows) 

Time: 2003.318 ms