2013-10-20 65 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