2011-04-14 122 views
0
SELECT title, retail, (SELECT AVG(retail) 
       FROM books) 
FROM books 
WHERE retail < (SELECT AVG(retail) 
       FROM books) 

有沒有辦法將(選擇AVG(零售) 從書籍中的一個)縮短爲別名?如何避免在oracle中重複?

回答

4

試試這個:

SELECT * 
    FROM (
    SELECT title, retail, AVG(retail) OVER() avg_retail 
    FROM books 
    ) 
WHERE retail < avg_retail 

,或者使用WITH:

WITH dat AS 
(
    SELECT title, retail, AVG(retail) OVER() avg_retail 
    FROM books 
) 
SELECT * 
    FROM dat 
WHERE retail < avg_retail 
+0

我試圖找到(http://www.oracle.com/pls/db102/search?word=over&tab_id=15&partno=)的解釋,是否有直接鏈接或者可能是一個解釋? – user490735 2011-04-14 21:36:05

+0

選中此項:http://download.oracle.com/docs/cd/B19306_01/server.102/b14223/analysis.htm#i1006928 – Chandu 2011-04-14 21:38:29

2

,你可以用WITH條款重構,也許是這樣的:

With avg_retail as 
    (SELECT AVG(retail) the_avg 
    FROM books) 
SELECT title, retail, avg_retail.the_avg 
from books, avg_retail 
where books.retail < avg_retail.the_avg;