我有一列包含一些值:
价值观 10 20 30 40 50
我需要一个基本上会给我两列这样的查询:
值百分比值 10 0 20 倍 30 岁 40z 50 100
计算值的方式是这样的:10( min
) 被认为是 0 %,而 50( max
) 被认为是 100%。所以 x 与 10 的差值为min
:
x= 100/(50-10) * 10 = 25
PS:理想情况下,我希望有一个可以在 Oracle 和 SQL Server 中运行的查询。
我有一列包含一些值:
价值观 10 20 30 40 50
我需要一个基本上会给我两列这样的查询:
值百分比值 10 0 20 倍 30 岁 40z 50 100
计算值的方式是这样的:10( min
) 被认为是 0 %,而 50( max
) 被认为是 100%。所以 x 与 10 的差值为min
:
x= 100/(50-10) * 10 = 25
PS:理想情况下,我希望有一个可以在 Oracle 和 SQL Server 中运行的查询。
您可以使用窗口函数执行此操作:
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
select 100.0 / (maxval - minval) * ([Values] - minval)
from (
select *
, min([Values]) over () as minval
, max([Values]) over () as maxval
from Table1
) SubQuerALias