Ruft die oberste Zeile nach der Bestellung in Oracle Subquery ab

8

Ich habe einen Tischschüler (ID, Name, Abteilung, Alter, Punktzahl). Ich möchte den jüngsten Schüler finden, der die höchste Punktzahl (unter den jüngsten Schülern) jeder Abteilung hat. In SQL Server kann ich folgende SQL verwenden.

%Vor%

In Oracle können Sie jedoch die Klausel order by in der Unterabfrage nicht verwenden, und es gibt kein Limit / top-ähnliches Schlüsselwort. Ich muss die Schüler-Tabelle zweimal mit sich selbst verbinden, um das Ergebnis abzufragen. In Orakel verwende ich folgendes SQL.

%Vor%

Hat jemand eine Idee, das obige SQL für Oracle zu vereinfachen?

    
James 03.08.2010, 06:30
quelle

4 Antworten

24

probiere das hier

aus %Vor%     
Bharat 03.08.2010, 06:46
quelle
10

Zusätzlich zu Allans Antwort funktioniert das auch:

%Vor%     
SurfingSanta 21.05.2014 01:14
quelle
5

Zusätzlich zu Bharat's Antwort ist es möglich, dies mit ORDER BY in der Unterabfrage in Oracle zu tun (wie von Jeffrey Kemp hervorgehoben):

%Vor%

Wenn Sie diese Methode verwenden, könnten Sie versucht sein, die Unterabfrage zu entfernen und einfach rownum = 1 zu verwenden. Dies würde zu dem falschen Ergebnis führen, da die Sortierung nach den Kriterien angewendet würde (Sie würden eine Zeile erhalten, die sortiert wurde, nicht eine Zeile aus der sortierten Menge).

    
Allan 03.08.2010 14:51
quelle
1
%Vor%     
Diwakar Kumar 12.05.2011 10:03
quelle

Tags und Links