3

我有一个数据表,我希望对其进行一些数值分析,因为我需要所有值都在同一范围内。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

所以如果列表是

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

最大平均值为 3,因此结果应为

0.5,1

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

4

2 回答 2

5

SQL 提琴示例

select
    Projectid,
    avg(cast(foo as decimal(29, 2))) / max(avg(cast(foo as decimal(29, 2)))) over ()
from tbl1
group by Projectid
于 2012-11-01T09:04:31.450 回答
1
;with cte as
(
    select projectid, AVG(foo) av
    from yourtable
    group by projectid
)
    select *,
        av/(select MAX(av) from cte)
    from cte
于 2012-11-01T09:03:47.377 回答