2013-04-03 21 views
0

百分比我已經包含了一些值的列:查詢,以表示分鐘的條款和最大

 
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中運行一個查詢。

+0

您正在使用哪個RDBMS? – Quassnoi

+0

@Quassnoi請參閱編輯。 – Inquisitive

回答

-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.

+0

這隻適用於這些特定的數字。 –

+0

@joeframbach:適用於10到50之間的所有數字.OP尚未定義該範圍之外的值的行爲。 – Andomar

+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 
+0

'const'如何工作? – Inquisitive

+0

@Inquisitive,它是給予內聯視圖的表別名。 –