如何找到最大值,之前未使用过的剩余最大值和最后剩余最大值

时间:2018-10-04 15:15:27

标签: oracle

我需要通过Oracle SQL使用max_weight,max_height和max_volume 如下:

  • 长度=最大高度,最大宽度或最大深度的最大值

  • 高度=其余2个最大值中的任何一个

  • 宽度=之前未使用的最后剩余最大值

我已经附加了基本查询来获取最大值,但是我需要从上面过滤掉一个数据。

如何编写查询以计算相同的值

sql query] 1

2 个答案:

答案 0 :(得分:0)

同时,您可以使用此方法...运行它以查看结果,然后将其包装并使用Case when rmax = 1 ...

select 
    MAXNUM
    ,RANK() over( order by maxnum  desc)as rmax
    ,dim
from (
    select 
        2 as maxnum, 'weight' as dim
    union
    select  
        4 as maxnum, 'length' as dim
    union
    select
        8 as maxnum, 'height' as dim
) as nnn

答案 1 :(得分:0)

假设您拥有以下数据(在我的示例中,这些列分别标记为col1col2col3;如果将这些列标记为“ height”或“ max_height”是毫无意义的任务是确定每种情况下的“高度”。

  col1   col2   col3
------ ------ ------
    10      8     15
    11     11     30
    13      9      9
    15      7     15

您想重新排列每个ROW中的数字,以使输出看起来像这样:

length height  width
------ ------ ------
    15     10      8
    30     11     11
    13      9      9
    15     15      7

这是一种有效的方法-您不必取消输入(将所有数字放在一个长列中)。之所以起作用,是因为GREATEST可以给您长度,LEAST可以给您宽度,而要得到中间的宽度,您可以将三个数字相加并减去两个极限。如果您必须对四个或更多的数字属性进行排名,则这种简单的方法将不起作用,但对于三个属性而言,它可以正常工作。

with
  test_data(col1, col2, col3) as(
    select 10,  8, 15 from dual union all
    select 11, 11, 30 from dual union all
    select 13,  9,  9 from dual union all
    select 15,  7, 15 from dual
  )
-- End of simulated data (not part of the solution).
-- SQL query begins BELOW THIS LINE. Use actual table and column names.
select col1, col2, col3,
       greatest(col1, col2, col3)                      as length,
       col1 + col2 + col3 - greatest(col1, col2, col3) 
                          - least(col1, col2, col3)    as height,
       least(col1, col2, col3)                         as width
from   test_data
;

      COL1       COL2       COL3     LENGTH     HEIGHT      WIDTH
---------- ---------- ---------- ---------- ---------- ----------
        10          8         15         15         10          8
        11         11         30         30         11         11
        13          9          9         13          9          9
        15          7         15         15         15          7