Wie hole ich das n-te höchste Gehalt aus einer Tabelle, ohne TOP und Sub-Query zu verwenden?

8

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.

    
HotTester 05.09.2010, 08:54
quelle

16 Antworten

10

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:

%Vor%

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.

    
marc_s 05.09.2010, 08:58
quelle
9
%Vor%

(oder verwenden Sie dense_rank anstelle von row_number , wenn Sie den n-ten höchsten Gehaltsunterschied wünschen)

    
Martin Smith 05.09.2010 08:58
quelle
5
%Vor%     
Venkatesh 08.03.2011 11:52
quelle
3
%Vor%     
abc 06.12.2012 06:28
quelle
1

Versuchen Sie es.

%Vor%     
Prabhu shanmughapriyan 09.01.2013 18:44
quelle
1

Es kann einfach wie folgt für die zweithöchste getan werden -

%Vor%

Aber für Nth höchste müssen wir CTE (Common Table Expression) verwenden.

    
manish 15.05.2013 19:24
quelle
1

versuche das. Unter Verwendung von CTE kann es sehr einfach sein, n-te Einträge zu finden **

%Vor%

**

    
ullas kishan 08.04.2016 05:08
quelle
1

Anzeige 5. Min. Sal. Emp. Tabelle.

%Vor%     
Siddharth Arekar 10.08.2016 16:42
quelle
1

Um das N-te höchste Gehalt zu finden:
Tabellenname - Emp

%Vor%

sql-Abfrage - & gt; Hier ist N das höchste Gehalt zu finden:

%Vor%     
Rehan Shikkalgar 12.10.2016 18:52
quelle
1

Wenn doppelte Einträge von

vorhanden sind

30.000,
23.000,
23.000,
15.000,
14.800

dann über ausgewählte Abfrage wird keine korrekte Ausgabe zurückgeben.

finde die richtige Abfrage wie folgt:

%Vor%     
Harshal S 31.12.2013 11:08
quelle
0
%Vor%     
Abhay Kumar Chaudhary 23.11.2016 15:08
quelle
0
%Vor%

Dies wird in Oracle funktionieren

    
mickey 17.02.2018 11:09
quelle
0

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%     
Ranjan 01.04.2018 10:26
quelle
-1

Höchste Sal mit ms sql Server:

select sal from emp where sal=(select max(sal) from emp)

Zweithöchster sal:

select max(sal) from emp where sal not in (select max(sal) from emp)

    
srikanth 31.10.2015 08:01
quelle
-1
%Vor%     
svd 05.01.2018 07:56
quelle
-2

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.

    
Rahul Kumar 04.07.2016 16:31
quelle