Top N, was mach ich falsch?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Top N, was mach ich falsch?
Hallo,

ich habe eine Tabelle Personen(Name,Gehalt), es gibt 9 Einträge mit verschiedenen Namen.
Ich möchte die Top 5 Verdiener auflisten

Wo liegt der fehler in der SQL Anweisung :

SELECT count() as rank, gehalt
FROM personen
GROUP BY gehalt
HAVING COUNT(
) <=5
ORDER BY rank ASC;

liefert:

“1”,“1100”
“1”,“1200”
“1”,“1300”
“1”,“1400”
“1”,“1500”
“1”,“1600”
“1”,“1700”
“1”,“1800”
“1”,“1900”
(Wert von Rank bleibt gleich -.-)


Du musst das Gehalt der Personen “gegeneinander abwägen”, also so:

SELECT COUNT() AS rank, gehalt, name
[color=crimson]FROM personen p1, personen p2
WHERE p1.gehalt <= p2.gehalt[/color]
GROUP BY name
HAVING COUNT(
) <= 5
ORDER BY rank ASC;


immer nach allem groupen was im select steht, ausser der aggregatsfunktion, also

select p.Gehalt, p.Name, count(*) as Rang
from Personen p, Personen q
where p.Gehalt <= q.Gehalt
group by p.Gehalt, p.Name
having count(*) <= 5
order by Rang asc;

Auch in diesem Beispiel zwingend? Wenn “Name” ein Primärschlüssel ist, dann ist es doch nicht zwingend erforderlich, oder?


so hats mein tutor mir gesagt, schema f :>