2016-10-12 4 views
1

収益とステータスの列を持つ注文を持つテーブルがあるとします。受注グループ別に注文をグループ化し(10ずつ増分してグループ化します)、それぞれの収益グループでステータス列が1に設定されている割合を取得します。私は、ウィンドウ関数を使用する方法だと思ったが、whereステートメントは、カラムがstatus == 1のカラムだけになるように制限する。 、20 | 50%などWHERE文でGROUP_BYの割合を計算する

SELECT CASE 
    WHEN revenue between 1 and 10 then 10 
    WHEN revenue between 10 and 20 then 20 
    WHEN revenue between 20 and 30 then 30 
    WHEN revenue between 30 and 40 then 40 
    WHEN revenue between 40 and 50 then 50 
    else 60 
END as revgroup, 
COUNT(*)/CAST(SUM(count(*)) over (partition by CASE 
    WHEN revenue between 1 and 10 then 10 
    WHEN revenue between 10 and 20 then 20 
    WHEN revenue between 20 and 30 then 30 
    WHEN revenue between 30 and 40 then 40 
    WHEN revenue between 40 and 50 then 50 
else 60 END) as float) as percentage 
from "order" 
where "order".status = 1 
group by revgroup 

答えて

0

句のPARTITION BYは、あなたのケースでは過剰である、各パーティションは

SELECT CASE 
    WHEN revenue between 1 and 10 then 10 
    WHEN revenue between 10 and 20 then 20 
    WHEN revenue between 20 and 30 then 30 
    WHEN revenue between 30 and 40 then 40 
    WHEN revenue between 40 and 50 then 50 
    else 60 
END as revgroup, 
COUNT(*) * 1.0/SUM(COUNT(*)) OVER() as percentage 
from "order" 
where "order".status = 1 
group by revgroup 
BY句のGROUPを使用して作成されました
関連する問題