2016-07-08 11 views
0

Ich arbeite für ein Telekommunikationsunternehmen und muss ein System für Top-Kunden entwickeln, die 10% des Gesamtumsatzes des Unternehmens im Monat beigetragen haben. Ich möchte die Anzahl der Kunden wissen, die für dieses Programm in Frage kommen. Ich benutze SQL DB2.SQL (DB2) -Abfrage, um die Anzahl der Kunden mit den höchsten 10% Umsatz zu ermitteln

Ex - In der unten stehenden Tabelle, Summe der Einnahmen 5000 und sein 10% beträgt 500, und ich mag die Anzahl der Mindestanzahl von Kunden, deren Summe der Einnahmen wäre wissen, entweder 500 oder knapp über 500

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

Antwort

0

interpretiere ich die Frage, die höchsten Einnahmen Kunden, deren Summe wollen mindestens 10% des Gesamt Einnahmen.

Sie benötigen eine kumulative Summe für diese:

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; 

Dies setzt voraus, dass eine Zeile dort pro Kunde.

EDIT:

where cume_rev - revenue < tot_rev * 0.1; 
+0

Thanx !!!!:

Für "nur oben", die where Klausel sein sollte Genial !!!!! Dieser Ertrag erforderte Ergebnis !!! –

2

Um alle Kunden zu finden, wo ihre Gesamtumsatz von mindestens 10 Prozent des Gesamtumsatzes ist:

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

Ihre Beispieldaten dies nicht zeigt, aber das beschäftigt sich auch mit mehreren Zeilen pro Stück Kunde in der ta ble (nur Ihr Beispiel hat eine einzelne Zeile pro Kunde)

Die die Zählung davon bekommen:

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