1
col1    col2
b   5
b   10
b   20
b   30
b   200
b   300

mytable から col2 が提供している上位 50 パーセンテージを選択します

col2
5
10
20

実際の 50% は異なりますが、

col1 col2   Total(of col2)   div(col2/total)    CumulativeAddition  %
b   5           565                 0.01            0.01            1%
b   10          565                 0.02            0.03            3%
b   20          565                 0.04            0.06            6%
b   30          565                 0.05            0.12            12%
b   200         565                 0.35            0.47            47%
b   300         565                 0.53            1.00            100%

ご覧のとおりです

5   1%
10  3%
20  6%
30  12%
200 47%

正しい SQL 関数を使用していますか?

4

2 に答える 2

3

SQL Server 2012 では、ウィンドウ関数を使用して累計を計算できます。累積パーセンテージは、現在の合計をテーブル全体の合計で割ったものです。

select  *
from    (
        select  *
        ,       100.0 * sum(col2) over (order by col2) / sum(col2) over () 
                    as perc
        from    dbo.YourTable
        ) SubQueryAlias
where   perc <= 50.0

whereSQL Server では句でのウィンドウ関数の使用が許可されていないため、サブクエリが必要です。

SQL Fiddle の例。


古いバージョンの SQL Server の場合、実行中の合計を計算するのはより手間がかかります。に関係がある場合はcol2、それらを区別する手段を提供する必要があります。

select  *
from    (
        select  cur.col1
        ,       cur.col2
        ,       100.0 * sum(running.col2) / total.total as perc
        from    dbo.YourTable cur
        join    (
                select  col2
                from    dbo.YourTable prev
                ) running
        on      running.col2 < cur.col2
        cross join
                (
                select  sum(col2) as total
                from    YourTable
                ) total
        group by
                cur.col1
        ,       cur.col2      
        ,       total.total
        ) SubQueryAlias
where   perc <= 50.0

SQL Fiddle の例。

于 2013-05-21T09:25:16.637 に答える