2017-06-27 6 views
0

Dies ist eine Frage für How to find max records for given rangeWie berechnen (aß - avg (Rate) für jeden Bereich

Follow-up ist habe ich mehrere Bereiche von menschlichen Input, wie 1-100, 101-10001 Für jeden Bereich, ich möchte berechnen. . rate - avg(rate for each range)

Input:

Distance Rate 
10  5 
25  200 
50  300 
1000  5 
2000  2000 

Output:

Distance rate - avg(rate for each range) 
10  x 
25  xx 
50  xx 
1000  xx 
2000  xxx 
+0

Warum enthält Ihre Frage die Bereiche nicht? –

+0

Ist das ausreichend? "Ich habe mehrere Bereiche von menschlicher Eingabe, wie 1-100, 101-10001" –

Antwort

1

Sie müssen die Bereiche definieren und dann Fensterfunktionen verwenden. Das ist ziemlich einfach:

select t.distance, t.rate, v.grp, 
     (t.rate - avg(t.rate) over (partition by v.grp)) as deviation 
from t outer apply 
    (values (case when t.distance <= 100 then '1-100' 
        when t.distance <= 1000 then '101-1000' 
        else 'other' 
       end) 
    ) v(grp);