2016-07-08 2 views
0

저는 통신 회사에서 일하고 있으며 한 달 동안 전체 회사 매출의 10 %를 기부 한 최고 가치 고객을 위해 계획을 실행해야합니다. 이 제도를받을 자격이있는 고객의 수를 알고 싶습니다. SQL DB2를 사용하고 있습니다.고객에게 기여하는 상위 10 % 매출액을 계산하는 SQL (DB2) 쿼리

Ex - 매출의 합계가 5000이고 그 10 %가 500이며, 총 수익이 500 또는 500을 약간 넘는 최소 고객 수를 알고 싶습니다.

자신의 총 수익이 전체 수익의 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; 

이 고객 당 하나 개의 행이 있다고 가정합니다

당신은 이것에 대한 누적 합계가 필요합니다.

편집 : "바로 위에"를

에서, where 절은해야한다 :

where cume_rev - revenue < tot_rev * 0.1; 
+0

고맙습니다 !!!! 굉장한 !!!!! 이 결과는 결과를 요구했다 !!! –

2

모든 고객을 찾는 방법은 다음과 같습니다

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

샘플 데이터가이 표시되지 않습니다,하지만이 또한 각 당 여러 행을 다루고 타의 고객 내가 누구의 합이 전체의 10 %로 가장 높은 수익 고객이 원하는과 같은 질문을 해석

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