如何避免在postgresql中重复一个长子查询?

时间:2013-10-20 02:34:48

标签: postgresql repeat

在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 个答案:

答案 0 :(得分: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