Auftrag mit meistem Profit auslesen

Rootbob91

Aktiver Benutzer
Beiträge
27
Hallo, siehe Titel.

Die Tabelle sieht so aus:
Name: auftraege
Spalten:
- id
- preis
- abzuege
- ...

Mein Ansatz:
SELECT id, SUM(preis)-SUM(abzuege) as 'gewinn' FROM auftraege GROUP BY gewinn ASC

Hatte auch schon was anderes probiert, aber hab das Snippet irgendwo untergehen lassen.
Bei der oberen Abfrage bekomme ich immer:
#1056 - Can't group on 'gewinn'

Ich weiß halt, dass ich mit der MAX() Funktion den höchsten Wert für zb. preis, oder abzuege bekommen kann, aber der Gewinn errechnet sich ja aus preis-abzuege, wie funktioniert das da? Zusätzlich brauche ich ja auch den Eintrag an sich, dessen Wert der höchste ist, nicht nur den Wert selber.
 
Werbung:
wieso willst Du nach der berechneten Spalte gruppieren?

Du hast
Code:
test=*# select * from rootbob91 ;
 id | preis | abzug
----+-------+-------
  1 |  10 |  5
  2 |  10 |  6
  3 |  12 |  7
  4 |  12 |  10
(4 rows)

suchst Du sowas?

Code:
test=*# select id, preis-abzug from rootbob91 order by preis-abzug desc;
 id | ?column?
----+----------
  1 |  5
  3 |  5
  2 |  4
  4 |  2
(4 rows)

Da sind nun aber 2 mit demselben gewinn, willst Du beide?

So kannst Du eine 'Platzierung', also ein Ranking machen:

Code:
test=*# select id, preis-abzug, rank() over (order by preis-abzug desc) from rootbob91 order by preis-abzug desc;
 id | ?column? | rank
----+----------+------
  1 |  5 |  1
  3 |  5 |  1
  2 |  4 |  3
  4 |  2 |  4
(4 rows)
 
So wie es aussieht klappt es wie es sollte mit dieser Abfrage:
Code:
SELECT id, preis, abzuege, preis - abzuege AS 'gewinn'FROM auftraege ORDER BY preis - abzuege DESC

Damit bekomme ich wie gewünscht den Auftrag, mit dem meisten Umsatz ganz oben. Wenn ich wollte könnte ich ja noch ein LIMIT 1 einfügen, dann sollte ich ja nur den Ersten bekommen?
 
Werbung:
Zurück
Oben