Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL-Abfrage, um alle Mitarbeiter mit dem n-ten höchsten Gehalt zu finden

Sie haben gefragt, was scheint wie eine vernünftige Frage. Es gibt verschiedene Möglichkeiten, Dinge in SQL zu tun, und manchmal sind einige Methoden besser als andere. Das Ranking-Problem ist nur eines von vielen, vielen Beispielen. Die "Antwort" auf Ihre Frage lautet im Allgemeinen order by wird eine bessere Leistung erbringen als group by bei MySQL. Obwohl auch das von den jeweiligen Daten abhängt und was Sie für "besser" halten.

Die spezifischen Probleme mit der Frage sind, dass Sie drei verschiedene Abfragen haben, die drei verschiedene Dinge zurückgeben.

Die erste gibt alle Mitarbeiter mit einem "dichten Rang" zurück, der gleich ist. Diese Terminologie wird absichtlich verwendet, weil sie dem ANSI dense_rank() entspricht Funktion, die MySQL nicht unterstützt. Wenn Ihre Gehälter also 100, 100 und 10 sind, werden zwei Zeilen mit einem Rang von 1 und eine mit einem Rang von 2 zurückgegeben.

Die zweite gibt unterschiedliche Ergebnisse zurück, wenn es Unentschieden gibt. Wenn die Gehälter 100, 100, 10 sind, gibt diese Version keine Zeilen mit einem Rang von 1, zwei Zeilen mit einem Rang von 2 und eine Zeile mit einem Rang von 3 zurück.

Die dritte gibt eine völlig andere Ergebnismenge zurück, nämlich nur die Gehälter und die Rangfolge der Gehälter.

Mein Kommentar zielte darauf ab, die Abfragen Ihrer Daten zu versuchen. Tatsächlich sollten Sie entscheiden, was Sie tatsächlich wollen, sowohl aus funktionaler als auch aus Leistungssicht.