2013-04-06 65 views
0

我在解决这个问题时遇到了问题 我需要找到价格增长率最高的项目。 这是我的代码:获取最高涨价

Select 
    q.Grocery_Item, 
    TO_CHAR(q.Price_IN_2000, '$90.00') price_in_2000, 
    TO_CHAR(q.Estimated_Price_In_2025, '$90.00') price_in_2025, 
    TO_CHAR(w.MY_OUTPUT,'9,990') || '%' as My_Output 
From 
    GROCERY_PRICES q, 
    (SELECT 
    GROCERY_ITEM, 
    (((Estimated_Price_In_2025-Price_IN_2000)/Price_IN_2000)*100) as MY_OUTPUT 
    FROM 
    GROCERY_PRICES 
) w 
Where 
    q.GROCERY_ITEM = w.GROCERY_ITEM and w.my_output in (select max(w.my_output) from GROCERY_PRICES group by grocery_item) 
GROUP BY 
w.MY_OUTPUT, q.GROCERY_ITEM, q.Price_IN_2000, q.Estimated_Price_In_2025 

我的输出是:

GROCERY_ITEM     PRICE_IN_2000 PRICE_IN_2025 MY_OUTPUT 
------------------------------ ------------- ------------- --------- 
B_001       $0.80   $2.64   230% 
B_002       $2.72   $7.36   171% 
M_004       $2.70   $5.65   109% 
T_006       $5.70   $6.65   17% 
R_003       $4.00  $13.20   230% 
E_001       $0.62   $1.78   187% 

6 rows selected 

这基本上是我的表中的所有数据

什么,我需要得到的是:

GROCERY_ITEM     PRICE_IN_2000 PRICE_IN_2025 MY_OUTPUT 
------------------------------ ------------- ------------- --------- 
B_001       $0.80   $2.64   230% 
R_003       $4.00  $13.20   230% 

对不起新在这里,不知道如何格式化我的问题:(

在此先感谢。

+1

邮政一些示例数据到sqlfiddle。 – Kermit 2013-04-06 17:25:36

+4

您正在使用哪种SQL DBMS? – Houari 2013-04-06 17:25:41

回答

0

像这样:

with price_delta as (
    select grocery_item, 
     price_in_2000, 
     ESTIMATED_PRICE_IN_2025, 
     ((ESTIMATED_PRICE_IN_2025 - Price_IN_2000)/Price_IN_2000)*100 as delta, 
     rank() over (order by ((ESTIMATED_PRICE_IN_2025 - Price_IN_2000)/Price_IN_2000)*100 desc) as rnk 
    from grocery_prices 
) 
select grocery_item, 
     price_in_2000, 
     ESTIMATED_PRICE_IN_2025, 
     delta 
from price_delta 
where rnk = 1; 

SQLFiddle(甲骨文):http://sqlfiddle.com/#!4/43379/2

+0

我使用Oracle SQL显影剂,用于创建和填充该表中的数据: CREATE TABLE grocery_prices (GROCERY_ITEM \t \t \t \t VARCHAR2(30)PRIMARY KEY, PRICE_IN_2000 \t \t \t \t NUMBER(6,2) , ESTIMATED_PRICE_IN_2025 \t \t NUMBER(6,2)); INSERT INTO grocery_prices VALUES('E_001',0.62,1.78); INSERT INTO grocery_prices VALUES('B_001',0.80,2.64); INSERT INTO grocery_prices VALUES('B_002',2.72,7.36); INSERT INTO grocery_prices VALUES('M_004',2.70,5.65); INSERT INTO grocery_prices VALUES('T_006',5.70,6.65); INSERT INTO grocery_prices VALUES('R_003',4.00,13.20); COMMIT; – DuckStalker 2013-04-06 20:34:58

+0

@DuckStalker:我改变了SQLFiddle。请不要**发布代码作为评论。编辑你的问题。 – 2013-04-06 20:49:11

+0

非常感谢,现在我需要弄清楚如何显示没有rnk列的记录 – DuckStalker 2013-04-06 21:19:14