Oracle SQL:如何从派生列中选择最大值

阿纳斯

我有一个包含3列(项目,old_value,new_value)的表(STUFF)。我想检索所有值变化百分比最高的项目。以下查询产生“此处不允许使用组功能”错误。我该如何解决这个问题?

SELECT    item, 
          old_value, 
          new_value, 
          highest_percentage
FROM      (SELECT item, old_value, new_value, 
                  (new_value - old_value) / old_value * 100 AS highest_percentage
          FROM    STUFF)
WHERE     highest_percentage = MAX(highest_percentage);

这是桌子

CREATE TABLE STUFF
( item      VARCHAR2(30) PRIMARY KEY,
  old_value     NUMBER(6, 2),
  new_value     NUMBER(6, 2));

INSERT INTO STUFF VALUES('E1',  0.62,  1.78);
INSERT INTO STUFF VALUES('B1',  0.80,  3.28);
INSERT INTO STUFF VALUES('B2',  2.72,  7.36);
INSERT INTO STUFF VALUES('M4',  2.70,  5.65);
INSERT INTO STUFF VALUES('T6',  5.70,  6.65);
INSERT INTO STUFF VALUES('R3',  4.00, 16.40);
INSERT INTO STUFF VALUES('G10',  8.00, 32.80);

理想情况下,我应该具有此输出。

ITEM                OLD_VALUE NEW_VALUE HIGHEST_PERCENTAGE       
------------------- --------- --------- ------------------
B1                  0.80      3.28      310                                    
G10                 8.00      32.80     310                                   
R3                  4.00      16.40     310
弗拉基米尔·切尔万涅夫(Vladimir Chervanev)

在Oracle中它被称为Top-N查询,您可以这样操作:

select * from 
    (select * from XXX order by YYY desc) 
  where rownum < N;

根据您的最新更新-在这种情况下,标量子查询会有所帮助:

SELECT * FROM STUFF 
  WHERE (new_value - old_value) / old_value * 100 = 
    (SELECT max((new_value - old_value) / old_value * 100) AS highest_percentage  
        FROM STUFF)

为了避免额外的子查询:

SELECT * FROM 
  STUFF,
  (SELECT max((new_value - old_value) / old_value * 100) AS percentage FROM STUFF) highest
WHERE (new_value - old_value) / old_value * 100 = highest.percentage ;

但是,分析功能似乎是最快的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在sql / oracle中选择值并组织到新表中

来自分类Dev

在Oracle / SQL中如何选择列值保持不变的行

来自分类Dev

如何在MySQL中选择列的最大值

来自分类Dev

如何从SQL Server列中选择前3个最大值

来自分类Dev

如何从Oracle SQL的几列中选择唯一值?

来自分类Dev

选择一个列,其中该行的最大值在Oracle的第三列之上分组

来自分类Dev

如何在Oracle Varray中选择值

来自分类Dev

Oracle SQL-从查询中选择所有最大列值

来自分类Dev

从所有先前的行中选择最大值(oracle sql)

来自分类Dev

在选择中选择Oracle SQL

来自分类Dev

从每个组的Oracle获取最大值

来自分类Dev

根据Oracle PL / SQL中的其他列最大值选择字段

来自分类Dev

SQL Oracle-如何从列中获取最大值,添加列,对其进行格式化并使用更多值进行连接

来自分类Dev

如何在Oracle SQL中查询给出列的最大值以及该行对应列的数据?

来自分类Dev

SQL在Oracle中选择最大月份

来自分类Dev

如何在两列中选择最大值的记录?

来自分类Dev

UPDATE列,其中不包含PL / SQL的oracle中每一行的最大值

来自分类Dev

Oracle-SQL查询以获取已从String转换为Integer的列的最大值

来自分类Dev

在单个查询中选择多个列值-Oracle

来自分类Dev

使用列的最大值从Oracle SQL表中过滤行

来自分类Dev

oracle-sql查询从每个基数中选择最大

来自分类Dev

更新查询中无autonincrement列的最大值-Oracle

来自分类Dev

从列SQL中选择最大值

来自分类Dev

Oracle SQL:仅返回最大值

来自分类Dev

在oracle中选择最大日期

来自分类Dev

oracle sql使用不同行类型的单个日期列查找最小值和最大值

来自分类Dev

SQL Oracle 只返回列值的最大值(值)

来自分类Dev

在重复项中选择值,在一列中没有最大值(Oracle)

来自分类Dev

Oracle SQL 用于比较列值并选择最大值在列 1 中的行

Related 相关文章

  1. 1

    如何在sql / oracle中选择值并组织到新表中

  2. 2

    在Oracle / SQL中如何选择列值保持不变的行

  3. 3

    如何在MySQL中选择列的最大值

  4. 4

    如何从SQL Server列中选择前3个最大值

  5. 5

    如何从Oracle SQL的几列中选择唯一值?

  6. 6

    选择一个列,其中该行的最大值在Oracle的第三列之上分组

  7. 7

    如何在Oracle Varray中选择值

  8. 8

    Oracle SQL-从查询中选择所有最大列值

  9. 9

    从所有先前的行中选择最大值(oracle sql)

  10. 10

    在选择中选择Oracle SQL

  11. 11

    从每个组的Oracle获取最大值

  12. 12

    根据Oracle PL / SQL中的其他列最大值选择字段

  13. 13

    SQL Oracle-如何从列中获取最大值,添加列,对其进行格式化并使用更多值进行连接

  14. 14

    如何在Oracle SQL中查询给出列的最大值以及该行对应列的数据?

  15. 15

    SQL在Oracle中选择最大月份

  16. 16

    如何在两列中选择最大值的记录?

  17. 17

    UPDATE列,其中不包含PL / SQL的oracle中每一行的最大值

  18. 18

    Oracle-SQL查询以获取已从String转换为Integer的列的最大值

  19. 19

    在单个查询中选择多个列值-Oracle

  20. 20

    使用列的最大值从Oracle SQL表中过滤行

  21. 21

    oracle-sql查询从每个基数中选择最大

  22. 22

    更新查询中无autonincrement列的最大值-Oracle

  23. 23

    从列SQL中选择最大值

  24. 24

    Oracle SQL:仅返回最大值

  25. 25

    在oracle中选择最大日期

  26. 26

    oracle sql使用不同行类型的单个日期列查找最小值和最大值

  27. 27

    SQL Oracle 只返回列值的最大值(值)

  28. 28

    在重复项中选择值,在一列中没有最大值(Oracle)

  29. 29

    Oracle SQL 用于比较列值并选择最大值在列 1 中的行

热门标签

归档