规范化SQL查询中的值

时间:2012-11-01 08:42:21

标签: sql sql-server sql-server-2008 tsql

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

我有一种缓慢而漫长的方式来实现这一目标,但我希望能够为我的问题找到一个更加严谨的前瞻性解决方案

我需要做的是:

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

目前我有

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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