规范化SQL查询中的值

Run*_* FS 3 sql t-sql sql-server sql-server-2008

我有一个数据表,我希望进行一些数值分析,因为我需要所有的值都在相同的范围内.0..1.

我有一个缓慢而漫长的方式来实现这个目标,但我想要一个更加困难的前瞻性解决方案来解决我的问题

我需要做的是:

每个项目中的projectid分组取每个值的平均值,除以整个集合的最大平均值.

目前我有

select avg(foo * 1.0)/ (Select MAX(IL) FROM (select avg(foo * 1.0) as IL from table group by     
                                             ProjectID) tbl)
from table
Run Code Online (Sandbox Code Playgroud)

所以,如果列表是

projectid  | foo
-----------------
1          | 1
1          | 2
2          | 4
2          | 2
Run Code Online (Sandbox Code Playgroud)

最大的平均值是3,结果应该是

0.5,1

其中第一个是projectId 1的平均值除以3,第二个是projectId 2的平均值除以3

Rom*_*kar 5

SQL FIDDLE示例

select
    Projectid,
    avg(cast(foo as decimal(29, 2))) / max(avg(cast(foo as decimal(29, 2)))) over ()
from tbl1
group by Projectid
Run Code Online (Sandbox Code Playgroud)