MAX-Wert nach einem GROUP BY ermitteln

DerMaddin

Benutzer
Beiträge
5
Hallo,

ich habe zwei Tabellen TEAM und MITARBEITER, wobei ein Mitarbeiter genau einem Team zugeordnet ist (1:n)

Tabelle TEAM
- tid (Primärschlüssel)
- bezeichnung

Tabelle MITARBEITER
- mid (Primärschlüssel)
- vorname
- nachname
- umsatz
- tid (Fremdschlüssel --> Tabelle TEAM)

Ziel: Ich möchte das Team mit dem höchsten Umsatz (= Summe aller Einzelumsätze der Mitarbeiter) ausgeben.
In meiner SQL-Abfrage bilde ich zunächst die Summe der Umsätze aller Mitarbeiter eines Teams (SUM) und gruppiere diese
nach Teams. --> Das funktioniert
icon_e_smile.gif


ABER wie bekomme ich dann das Team mit dem höchsten Umsatz?

SELECT t.name, SUM(m.umsatz) AS teamumsatz
FROM team t
JOIN mitarbeiter m
ON t.tid = m.tid
GROUP BY t.tid
HAVING ???

Ich weiß, dass ich hier ein HAVING mit einem Sub-Select brauche, komme aber nicht weiter.

Kann mir da jemand helfen?

Danke & Gruß
Der Maddin
 
Werbung:
Hallo,

sorry, ich hätte dazu schreiben sollen, dass ich diesen Versuch schon unternommen hatte.
Problem dabei: Wenn es zwei gleiche höchste Werte gibt, schneidet "Limit 1" einen davon ab.

Aber dennoch: Vielen Dank für Deine Hilfe :-)

Maddin
 
erstelle erst einmal die aufsummierten Umsätze je Team. Angenommen, das sieht so aus.

Code:
test=*# select * from team ;
 id | umsatz
----+--------
  1 |     20
  2 |     20
  3 |     10
(3 rows)

Damit kannst Du dann rank() nutzen:

Code:
test=*# select id, rank() over (order by umsatz desc) from team order by umsatz desc;
 id | rank
----+------
  1 |    1
  2 |    1
  3 |    3
(3 rows)

und weiter dann:

Code:
test=*# with r as (select id, rank() over (order by umsatz desc) from team order by umsatz desc) select * from r where rank = 1;
 id | rank
----+------
  1 |    1
  2 |    1
(2 rows)
 
Werbung:
Zurück
Oben