2012-11-01 41 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个多列没有办法满足,真正的情况? –