MySql Abfrage - Zeile bei der 95% der Summe erreicht sind

LF1986

Neuer Benutzer
Beiträge
1
Moin,

vielleicht habt ihr eine Lösung für mich.
Ich habe eine Verkaufshistorie mit folgenden Spalten.

- Verkaufspreis
- Einkaufspreis
- Menge
Damit kann ich die Zeilensumme und den Kalkulationszuschlag errechnen.

Ich möchte nun den Kalkulationszuschlag ermitteln, ab dem ich keinen Umsatz mehr generiere, um diese Kalkulation als Maximale Kalkulation zu hinterlegen. Da es Aber einige Ausreißer gibt, kann ich nicht das Maximum nehmen.

Meine Idee: Ich sortiere alle Verkaufszeilen mit Betrag aufsteigend nach Kalkulationsaufschlag. Die Zeile bei der z.B. 95% des kumulierten Gesamtumsatzes überschritten wird möchte ich ausgeben.

Betrag | Zuschlag | Kumulierter Betrag
900 | 20 | 900
100 | 23 | 1000
200 | 28 | 1200
800 | 42 | 2000
100| 46 | 2100
50 | 58 | 2150 <--- Schwelle bei 58 % überschritten
20| 62 | 2170
60 | 71 | 2230

_____
Summe = 2230
Schwelle bei 2230 * 0,95 = 2119

Vielleicht hat ja jemand eine Idee. Danke schon mal vorab!

Gruß
 
Werbung:
um es mal zu zeigen:

Code:
test=*# select * from lf1986;
 id | betrag
----+--------
  1 |    900
  2 |    100
  3 |    200
  4 |    800
  5 |    100
  6 |     50
  7 |     20
  8 |     60
(8 rows)

test=*# with foo as (select id, betrag, sum(betrag) over (order by id) as running_sum, sum(betrag) over (order by id rows between unbounded preceding and unbounded following) as gesamt from lf1986) select * from foo;
 id | betrag | running_sum | gesamt
----+--------+-------------+--------
  1 |    900 |         900 |   2230
  2 |    100 |        1000 |   2230
  3 |    200 |        1200 |   2230
  4 |    800 |        2000 |   2230
  5 |    100 |        2100 |   2230
  6 |     50 |        2150 |   2230
  7 |     20 |        2170 |   2230
  8 |     60 |        2230 |   2230
(8 rows)

test=*# with foo as (select id, betrag, sum(betrag) over (order by id) as running_sum, sum(betrag) over (order by id rows between unbounded preceding and unbounded following) as gesamt from lf1986) select *, case when running_sum / gesamt::numeric > 0.5 then '*' else '' end as "50%", case when running_sum / gesamt::numeric > 0.95 then '*' else '' end as "95%" from foo;
 id | betrag | running_sum | gesamt | 50% | 95%
----+--------+-------------+--------+-----+-----
  1 |    900 |         900 |   2230 |     |
  2 |    100 |        1000 |   2230 |     |
  3 |    200 |        1200 |   2230 | *   |
  4 |    800 |        2000 |   2230 | *   |
  5 |    100 |        2100 |   2230 | *   |
  6 |     50 |        2150 |   2230 | *   | *
  7 |     20 |        2170 |   2230 | *   | *
  8 |     60 |        2230 |   2230 | *   | *
(8 rows)

test=*#
 
Werbung:
Ich habe eine Verkaufshistorie mit folgenden Spalten.

- Verkaufspreis
- Einkaufspreis
- Menge
Damit kann ich die Zeilensumme und den Kalkulationszuschlag errechnen.

Nachtrag:

das was Du willst ist prinzipiell nicht möglich, solange Du kein Sortierkriterium wie z.B. einen Timestamp hast, wann der Verkauf erfolgte.
 
Zurück
Oben