Как избежать дублирования в oracle? - PullRequest
0 голосов
/ 15 апреля 2011
SELECT title, retail, (SELECT AVG(retail)
                 FROM   books) 
FROM   books
WHERE  retail < (SELECT AVG(retail)
                 FROM   books) 

Есть ли способ сократить один из (ВЫБЕРИТЕ AVG (розничная торговля) ИЗ книги) на псевдоним?

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

Попробуйте это:

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
2 голосов
/ 15 апреля 2011

вы можете выполнить рефакторинг с предложением 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...