我需要通过Oracle SQL使用max_weight,max_height和max_volume 如下:
长度=最大高度,最大宽度或最大深度的最大值
高度=其余2个最大值中的任何一个
宽度=之前未使用的最后剩余最大值
我已经附加了基本查询来获取最大值,但是我需要从上面过滤掉一个数据。
如何编写查询以计算相同的值
] 1
答案 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)
假设您拥有以下数据(在我的示例中,这些列分别标记为col1
,col2
,col3
;如果将这些列标记为“ 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