2012-11-01 76 views
3

我有一個數據表,我希望執行一些數字分析,因爲我需要所有的值都在相同的範圍內。 0..1。規範化SQL查詢中的值

我完成這有點慢,longhanded方式,但想更straigt着高性能的解決我的問題

我需要做的是:

組由專案編號 在每個項目取每個值的平均值併除以整個集合的最大平均值。

目前我有

select avg(foo * 1.0)/ (Select MAX(IL) FROM (select avg(foo * 1.0) as IL from table group by  
              ProjectID) tbl) 
from table 

因此,如果該列表是

projectid | foo 
----------------- 
1   | 1 
1   | 2 
2   | 4 
2   | 2 

最大平均是3,結果應該爲此是

0.5,1

其中首先是projectId 1除以3的平均值,第二個是projectId的平均值2除以3

回答

5

SQL FIDDLE EXAMPLE

select 
    Projectid, 
    avg(cast(foo as decimal(29, 2)))/max(avg(cast(foo as decimal(29, 2)))) over() 
from tbl1 
group by Projectid 
+0

不會產生預期的結果。結果是0.333333和1 –

+0

不,結果是0.5和1,只是在SQL小提琴中檢查它 - http://sqlfiddle.com/#!3/57a00/18 –

+0

現在它是正確的,但再次這不是版本顯示或在小提琴鏈接時,我寫了評論:) –

0
;with cte as 
(
    select projectid, AVG(foo) av 
    from yourtable 
    group by projectid 
) 
    select *, 
     av/(select MAX(av) from cte) 
    from cte 
+0

在我使用這兩個相加平均,並有20個多列沒有辦法滿足,真正的情況? –