2016-07-08 4 views
0

私は電気通信会社の仕事をしており、その月の全社売上高の10%を拠出している貴重な顧客のスキームを実行する必要があります。私はこのスキームの対象となる顧客の数を知りたいですか?私はSQL DB2を使用しています。顧客に貢献するトップ10%の収益を得るためのSQL(DB2)クエリ

例 - 収入の合計は5000で、その10%は500です。収入の合計が500または500を上回る最小顧客数を知りたい場合

あなたのサンプルデータがこれを示していないが、これはまた、それぞれごとに複数の行を扱う

select customer 
from the_table 
group by customer 
having sum(revenue) >= (select sum(revenue) * 0.1 from the_table); 

その総収入が収益全体の10%以上であるすべての顧客を検索するに

Customers Revenue 
A 156 
B 259 
C 389 
D 125 
E 578 
F 321 

答えて

0

:BLE

そのカウントを取得(あなたの例は、顧客ごとに単一の行を持っています)収益。

あなたは、このための累積和を必要とする:

select count(*) 
from (select t.*, sum(revenue) over (order by revenue desc) as cume_rev, 
      sum(revenue) over() as tot_rev 
     from t 
    ) t 
where cume_rev <= tot_rev * 0.1; 

これは、顧客ごとに1つの行があることを前提としています。

EDIT: "真上" については

where句は次のようになります。

where cume_rev - revenue < tot_rev * 0.1; 
+0

ありがとう!!!!驚くばかり !!!!!この収量は結果を必要とした! –

2

タの顧客私はその合計の少なくとも10%で最も高く、収益の顧客を望むように質問を解釈

select count(*) 
from (
    select customer 
    from the_table 
    group by customer 
    having sum(revenue) >= (select sum(revenue) * 0.1 from the_table) 
) t 
関連する問題