1

MSSQL 2008 R2 データベースに約 300 万のデータ ポイントを持つ次のテーブル構造があります。

vertical|Defects(F)|Defects(NF)|
--------------------------------
Billing |193       |678
Provi   |200       |906
Billing |232       |111
Analyt  |67        |0
Provi   |121       |690

ウィスカー プロットを描画するには、最小、最大、第 1 四分位、第 3 四分位を計算する必要があります。したがって、次の形式で出力する必要があります

vertical|Max       |Min      |Q1       |Q3
--------------------------------
Billing |343       |24       |103.75   |263.25
Provi   |811       |110      |285.25   |635.75
Analyt  |67        |67       |67       |67

Max、Min、および quartile の計算は、Defects(F) と Defects(NF) を追加した後に行われることに注意してください。

助けてください!!

4

1 に答える 1

1

このメソッドは、各タイプの行が多数ある場合にのみ機能します

q1min は第 1 四半期の最小値 (全体の最小値)

q2min は第 2 四半期 (第 1 四分位数) の最小値です

q3max は第 3 四半期 (第 3 四分位数) の最大値です。

q4max は第 4 四半期の最大値 (全体の最大値)

declare @my_table table (vertical varchar(50),[Defects(F)] int, [Defects(NF)] int);
insert into @my_table values ('Billing',193,678);
insert into @my_table values ('Provi',200,906);
insert into @my_table values ('Billing',232,111);
insert into @my_table values ('Analyt',67,0);
insert into @my_table values ('Provi',121,690);

insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);
insert into @my_table values ('Billing',111,678);

WITH cte as (
    select
        vertical,
        [Defects(F)]+[Defects(NF)] as defects
    from @my_table
),
PivotData AS
(
    select
        vertical,
        CASE WHEN quartile in (1,2) THEN MIN(defects) ELSE MAX(defects) END m,
        quartile
    from (
        select
            vertical,
            defects,
            ntile(4) over (PARTITION BY vertical order by defects) as quartile
        from cte
    ) i
    group by vertical, quartile
)
select vertical, [1] as q1min, [2] as q2min, [3] as q3max, [4] as q4max
FROM PivotData
PIVOT (SUM(m) FOR quartile in ([1],[2],[3],[4])) as p;
于 2013-06-13T15:24:20.533 に答える