2013-10-20 4 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 
Смежные вопросы