1

在 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

解决方案必须是一个查询。(我的意思是没有办法创建临时表等)

4

1 回答 1

1

使用公用表表达式- 它在内部使用物化选择

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
于 2013-10-20T05:10:41.207 回答