Die Abfrage sagt für jede Zeile gehen und zählen, wie viele eindeutige Werte in der Tabelle sind mit einem größerer Wert (in einer bestimmten Spalte) als der, den ich betrachte. Halten Sie nur diejenigen (Verbindungen möglich), die auf eine bestimmte Position fallen. Für den 4. Platz erwarten Sie also 3 höhere Werte.
Dies wird durch die innere Abfrage erreicht, die eine korrelierte Unterabfrage genannt wird. Obwohl der Server wahrscheinlich eine effizientere Möglichkeit hat, die Ergebnisse tatsächlich zu berechnen, können Sie sich das ähnlich wie eine Schleife mit einem Funktionsaufruf vorstellen. Die innere Abfrage wird logisch einmal für jede Zeile in der äußeren Abfrage ausgeführt und die Referenz (en) bis a
darin sind für jeden dieser Läufe konstant.
Umschreiben auf diese Weise kann Ihnen helfen, zu verstehen. (Und Sie können auch die innere Abfrage selbst testen.)
select * from
(
select
a.columnname,
(
select count(distinct columnname)
from tablename as b
where b.columnname > a.columnname
) as NumRowsGreater
from tablename as a
) as t
where NumRowsGreater = (n-1)
was ist Ihr dbms ? –
Ich verwende Microsoft SQL Server – Thulasiram
Markieren Sie Ihre Frage entsprechend. Sie haben es mit "SQL" markiert, was "strukturierte Abfragesprache" und nicht "SQL Server" ist. –