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?
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).