Запрос говорит для каждой строки идти и подсчитать, сколько уникальных значений в таблице с большее значение (в конкретном столбце), чем тот, на который я смотрю. Держите только те (связи), которые попадают в определенную позицию. Итак, для 4-го места вы ожидаете найти 3 значения, которые выше.
Это выполняется посредством внутреннего запроса, который называется коррелированным подзапросом. Хотя у сервера, вероятно, будет более эффективный способ фактического вычисления результатов, вы можете думать о нем как о цикле с вызовом функции. Внутренний запрос логически выполняется один раз для каждой строки во внешнем запросе, а ссылки (ссылки) на a
внутри него постоянны для каждого из этих прогонов.
Переписывание этого способа может помочь вам понять. (И вы можете также проверить внутренний запрос сам по себе.)
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)
что ваш DBMS ? –
Я использую Microsoft SQL Server – Thulasiram
Соблюдайте свой вопрос соответствующим образом. Вы отметили «SQL», который является «структурированным языком запросов», а не «SQL Server». –