ORACLE вопрос об идентификаторах - PullRequest
2 голосов
/ 07 июля 2011

Если вы создаете функцию и имя, есть ли способ использовать это имя позже в вашем утверждении?

Например, в приведенном ниже коде я назвал sellprice-buyprice как PROFIT, но, похоже, я не могу использовать это снова, так как это приводит к ошибкам в качестве неверного идентификатора. Если я не могу этого сделать, пожалуйста, дайте мне знать, как я буду отображать максимальную прибыль в этом столбце.

SELECT item, buyprice, sellprice,
sellprice-buyprice as “PROFIT”
FROM auctions
WHERE PROFIT = (select MAX(PROFIT) from auctions); 

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

Не могли бы вы попробовать это утверждение: select * from (select item, buyprice, sellprice, sellprice-buyprice as “PROFIT” from auctions order by 4 desc) where rownum = 1;

0 голосов
/ 08 июля 2011

В дополнение к использованию подзапросов, как уже было предложено, вы можете добиться этого путем рефакторинга подзапроса:

WITH auctions_p AS (SELECT   item,
                             buyprice,
                             sellprice,
                             sellprice - buyprice AS profit
                      FROM   auctions)
SELECT   item,
         buyprice,
         sellprice,
         profit
  FROM   auctions_p
 WHERE   profit = (SELECT   MAX(profit) FROM auctions_p);

Если вы собираетесь использовать это много и используете 11g, вы можете сделать этот расчет постоянно доступным, определив его как виртуальный столбец:

ALTER TABLE auctions ADD (profit AS (sellprice - buyprice));

SELECT   item,
         buyprice,
         sellprice,
         profit
  FROM   auctions
 WHERE   profit = (SELECT   MAX(profit) FROM auctions);
0 голосов
/ 08 июля 2011

Вы должны использовать имя функции в предложении where, ссылка на псевдоним там недопустима.

SELECT item, buyprice, sellprice,
sellprice-buyprice as “PROFIT”
FROM auctions
WHERE sellprice-buyprice = (select MAX(PROFIT) from auctions);

Или вы можете сделать следующее, если вы действительно хотите использовать псевдоним

select item, buyprice, sellprice, profit
from
(
  SELECT item, buyprice, sellprice, sellprice-buyprice as “PROFIT”
  FROM auctions)
)
WHERE PROFIT = (select MAX(PROFIT) from auctions);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...