【问题标题】:SQL - Oracle - how to select securities from table with top change %SQL - Oracle - 如何从变化最大的表中选择证券%
【发布时间】:2014-07-25 02:10:18
【问题描述】:

我需要一些帮助来完成 SQL-Oracle 中的查询。我试图让它选择从 price1 到 price2 具有最高或最大收益的行或证券。这是我已经拥有的。当我尝试在 select 或 where 子句中使用子查询时,失败......而且我不能使用硬引用的查询,因为表中的数据会定期增加到 1000 个安全。任何帮助表示赞赏

我的查询:

select security, 
       price1,
       price2,
       ((price2 - price1)/price1)*100 as Percentage
  FROM market 

我的表格和数据

CREATE TABLE market
(security   VARCHAR2(30) PRIMARY KEY,
PRICE1 NUMBER(6, 2),
PRICE2 NUMBER(6, 2));

INSERT INTO market VALUES('A', 62, 178);
INSERT INTO market VALUES('B', 80, 328);
INSERT INTO market VALUES('C', 72, 736);
INSERT INTO market VALUES('D', 270, 565);
INSERT INTO market VALUES('E', 570, 665);
INSERT INTO market VALUES('F', 400, 1640);
INSERT INTO market VALUES('G', 800, 3280);

COMMIT;

【问题讨论】:

  • 虽然您的示例没有显示它,但我假设每个单一证券将有多行具有不同的 price1/price2 值,对吗?
  • 您想要变化百分比最高的证券(1 行代表您的“答案”,还是想要每个证券的最高百分比变化?
  • 嗨布赖恩....对于这张桌子,只有 2 个价格。价格 1 和价格 2

标签: sql oracle stocks


【解决方案1】:

这是另一种选择。

select * from
  (select security, price1, price2, ((price2 - price1)/price1)*100 as Percentage
   from market
   order by ((price2 - price1)/price1)*100 desc
  )
where rownum = 1
;

【讨论】:

  • 这不会处理证券之间的联系。既然您有其他解决方案,我将保持原样,而不是重写它,因为我最终可能会效仿 Gordon 的解决方案。
【解决方案2】:

有几种方法可以做到这一点。这是一种方法:

select m.*
from (select security, price1, price2, ((price2 - price1)/price1)*100 as Percentage,
             dense_rank() over (order by ((price2 - price1)/price1)*100 desc) as ranking
      from market
     ) m
where ranking = 1;

【讨论】:

  • 感谢戈登。即使在我用新数据填充表格后,这个也能正常工作。
【解决方案3】:
 select m.security, x.max_pct_chg
  from market m
  join (select max(((price2 - price1) / price1) * 100) as max_pct_chg
          from market) x
    on ((m.price2 - m.price1) / m.price1) * 100 = x.max_pct_chg

http://sqlfiddle.com/#!4/182cb0/3/0

【讨论】:

  • 太棒了!!!!....谢谢你...很多B。我认为没有'where'子句是不可能做到的。我确实用新数据填充了表格,其中我现在有五只证券的最高百分比涨幅相同,所有 5 只都出现在结果中。
  • @user3650350 没问题,是的,这个解决方案会保持联系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2012-07-11
  • 2016-06-15
  • 2020-05-03
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多