2013-08-01 3 views
0

Я не могу понять этот вопрос:SQL запросов :: число = запрос на выборку в котором пункт

SELECT FIELD1 FROM TABLE1 T1 
WHERE 3 = (
    SELECT COUNT(FIELD1) 
    FROM TABLE1 T2 
    WHERE T2.FIELD1 <= T1.FIELD1 
); 

Этот запрос работает должным образом без каких-либо ошибок. Внутренний запрос подсчета возвращает результат как 363. в where where, если я положил 3 = (select.., тогда я получаю один результат. Если я поставлю 4=(select.., то никаких записей не будет. Если я поставлю 363 = (select..., тогда прибудут 3 записи.

Я смущен этим. Пожалуйста, помогите мне понять это.

ответ

0

Запрос производит результирующий набор, состоящий из нижних n записей в table1 относительно упорядочения подразумеваемого значений field1 где n представляет собой буквальное число в предложении where. непустое задание результатов запроса также утверждает, что для соответствия критерию сравнения имеется ровно n кортежей.

Вы поэтому рассчитываете пассажиров n-го ранга в турнире при условии, что ранг может быть выпущен однозначно.

пример:

себе результат турнира следующим образом:

  1. Скуби Ду
  2. Donald Duck
  3. микки мыши
  4. Кальвин
    Гоббс

    6. Минни мышь ...

363. кто

этот рейтинг будет совместима с результатами (конечно, вы бы ранга обычно ярлык Кальвина & Гоббса 4 вместо 5, как вы 'd, если вы используете свой запрос для dertemine top n конкурсантов).

1

Подзапрос подсчитывает, сколько значений FIELD1 во всей таблице меньше или равно по сравнению с текущим во внешнем запросе (T1.FIELD1). Поэтому вся очередь просто работает так:

Возврат FIELD1 значения из таблицы TABLE1 если есть ровно 3 (или 4 или любой номер, который вы положили) другие FIELD1 значения в таблице TABLE1 , которые меньше или равны ,

Обратите внимание, что она использует <= что означает, что подзапрос будет возвращать ВСЕГДА по меньшей мере, 1.

+0

не должно быть «_smaller_ или равно по сравнению с текущим»? – collapsar

+0

@collapsar да, вы правы. Сожалею. Исправленный. –

Смежные вопросы