3

すべての値が同じ範囲内にある必要があるため、数値分析を実行したいデータテーブルがあります。0..1。

私はこれを達成するためのやや遅くて手間のかかる方法を持っていますが、私の問題に対するより直接的なパフォーマンスの高い解決策が欲しいです

私がする必要があるのは:

group by 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

ここで、1 つ目は projectId 1 の平均を 3 で割ったもので、2 つ目は 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 に答える