Vor kurzem wurde ich in einem Interview gebeten, eine Abfrage zu schreiben, bei der ich das n-te höchste Gehalt aus einer Tabelle holen musste, ohne TOP und irgendeine Unterabfrage zu verwenden?
Ich wurde total verwirrt, da die einzige Art und Weise, wie ich es implementieren konnte, TOP und Sub-Query verwendet.
Bitte geben Sie seine Lösung.
Vielen Dank im Voraus.
Versuchen Sie einen CTE - Ausdruck der allgemeinen Tabelle:
%Vor% Hier erhalten Sie die Top 5 Gehälter in absteigender Reihenfolge - Sie können mit dem RowNumn
-Wert spielen und grundsätzlich jeden Anteil aus der Liste der Gehälter abrufen.
Es gibt andere in SQL Server verfügbare Rankingfunktionen , die ebenfalls verwendet werden können - z. Es gibt NTILE
, die Ihre Ergebnisse in n Gruppen gleicher Größe aufteilen (so genau wie möglich), so dass Sie z. Erstelle 10 Gruppen wie folgt:
Dadurch werden Ihre Gehälter in 10 gleich große Gruppen aufgeteilt - und die Gruppe mit NTile=1
ist die "TOP 10%" -Gruppe der Gehälter.
(oder verwenden Sie dense_rank
anstelle von row_number
, wenn Sie den n-ten höchsten Gehaltsunterschied wünschen)
versuche das. Unter Verwendung von CTE kann es sehr einfach sein, n-te Einträge zu finden **
%Vor%**
Um das N-te höchste Gehalt zu finden:
Tabellenname - Emp
sql-Abfrage - & gt; Hier ist N das höchste Gehalt zu finden:
%Vor%Um das N-te höchste Gehalt zu finden, denken wir nur an einzigartige Gehälter. Das höchste Gehalt bedeutet, dass kein Gehalt höher ist als es, das zweithöchste bedeutet, dass nur ein Gehalt höher ist als es, das dritthöchste bedeutet, dass zwei Gehälter höher sind, In ähnlicher Weise bedeutet N-tes höchstes Gehalt, dass N-1-Gehälter höher sind als es. Nun, Sie können das LIMIT Schlüsselwort verwenden, das Paginierung bietet Fähigkeit. Sie können wie folgt tun:
%Vor%Beispiel: Zweithöchstes Gehalt in MySQL ohne Unterabfrage:
%Vor%Was ist, wenn wir N-tes höchstes Gehalt ohne Row_Number, Rank, Dense Rank und Sub Query finden müssen?
Ich hoffe, dass dies unten Abfrage hilft.
Wählen Sie * aus [dbo]. [Test] Reihenfolge nach Gehalt desc
%Vor%Ergebnis: - 4000, die zweithöchste.
Tags und Links sql sql-server sql-server-2005 sql-server-2008