在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
解决方案必须是一个查询。 (我的意思是没有办法创建临时表等)。
答案 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