Anmelden

View Full Version : SQL-Abfrage für 80% Kunden



mgraskamp
19-06-18, 06:56
Hallo Zusammen,

ich brauche mal einen Gedankenanstoß für eine SQL Abfrage.

Tabelle:
Kunde, Jahr, Umsatz

Ich möchte eine Auflistung aller Kunden eines Jahres absteigend nach Umsatz (also der größte Kunde zuerst), mit denen ich 80% des Gesamtumsatzes mache. Habe ich z.B. 100.000€ Umsatz im Jahr 2018, möchte ich die stärksten Kunden sehen, die zusammen 80.000€ Umsatz gemacht haben.

Geht das per SQL?

Vielen Dank für Eure Hilfe

jordi
19-06-18, 08:03
Hallo,
in neueren Versionen gibt es die Window-Funktion sum() over ...
In 7.1 z.B. geht es auch so:


with data (kd,ums) as (values
(1, 50000),(2, 20000),(3, 11000),(4, 2000),(5, 3000),(6, 3000),
(7, 8000), (8, 3000)),
parm (maxums,bestums) as
(select sum(ums),int(sum(ums) * 0.8)
from data),
sort (kd,ums,rn) as
(select kd,ums,
row_number() over (order by ums)
from data),
akku (umssum,kd,ums,cr) as
(select ums,kd,ums, rn
from sort
where rn = 1
union all
select a.umssum + s.ums,
s.kd,
s.ums,
s.rn
from akku a
inner join sort s on a.cr + 1 = s.rn)
select kd,ums
from akku
cross join parm
where umssum >= (maxums - bestums)
order by ums desc

mgraskamp
19-06-18, 08:40
Genial. Hat funktioniert. Vielen Dank.

Pikachu
19-06-18, 08:46
Probier's mal so oder ähnlich:

How to SELECT top N rows that sum to a certain amount? (https://stackoverflow.com/questions/17889432/how-to-select-top-n-rows-that-sum-to-a-certain-amount#17889741)


select t1.amount
from MyTable t1
left join MyTable t2 on t1.amount > t2.amount
group by t1.amount
having coalesce(sum(t2.amount),0) < 7