查询以最小值和最大值表示百分比

时间:2013-04-03 17:50:01

标签: sql sql-server oracle

我有一个包含一些值的列:

Values
 10
 20
 30
 40
 50

我需要一个基本上会给我两个列的查询:

Values  PercentageValues
10        0
20        x
30        y
40        z
50       100

计算值的方式如下:10(min)被认为是0%而50(max)被认为是100%。所以x与min的差值为10将为:

x= 100/(50-10) * 10 = 25

P.S:理想情况下,我希望有一个可以在Oracle和SQL Server中运行的查询。

2 个答案:

答案 0 :(得分:2)

您可以使用窗口功能执行此操作:

select t.value,
       (value - minvalue) * 100.0/(maxvalue - minvalue) 
from (select t.*,
             min(value) over () as minvalue,
             max(value) over () as maxvalue
      from t
     ) t

您可以使用显式联接执行相同的操作:

select t.value,
       (value - minvalue) * 100.0/(maxvalue - minvalue) 
from t cross join
     (select min(value) as minvalue, max(value) as maxvalue
      from t
     ) const

答案 1 :(得分:-1)

select  100.0 / (maxval - minval) * ([Values] - minval)
from    (
        select  *
        ,       min([Values]) over () as minval
        ,       max([Values]) over () as maxval
        from    Table1
        ) SubQuerALias

Example at SQL Fiddle.