Оператор SQL: TOP. — it-black.ru
Оператор SQL: TOP. — it-black.ruОператор TOP позволяет ограничить выборку числа записей до заданного числа. При использовании оператора TOP совместно с оператором ORDER BY, на вывод пойдет первые N записей отсортированного списка, в противном случае, выведутся первые N строк таблицы.
Данный оператор используется только в СУБД MS SQL Server. Аналогом в MySQL является оператор LIMIT.
// Синтаксис оператора TOP: TOP ( N [PERCENT] ) // Параметр PERCENT позволяет задать количество строк в процентах.
Примеры оператора TOP. Возьмём нашу таблица Artists:
Singer | Album | Year | Sale |
The Prodigy | Invaders Must Die | 2008 | 1200000 |
Drowning Pool | Sinner | 2001 | 400000 |
Massive Attack | Mezzanine | 1998 | 2300000 |
The Prodigy | Fat of the Land | 1997 | 600000 |
The Prodigy | Music For The Jilted Generation | 1994 | 1500000 |
Massive Attack | 100th Window | 2003 | 1200000 |
Drowning Pool | Full Circle | 2007 | 800000 |
Massive Attack | Danny The Dog | 2004 | 1900000 |
Drowning Pool | Resilience | 2013 | 500000 |
Пример 1. Используя оператор TOP вывести 3 самых свежих альбома (название и год выпуска):
SELECT TOP(3) Album, Year FROM Artists ORDER BY Year;
Результат:
Album | Year |
Resilience | 2013 |
Invaders Must Die | 2008 |
Full Circle | 2007 |
Пример 2. Используя оператор TOP вывести первые 2 строки таблицы:
SELECT TOP(2) * FROM Artists;
Результат:
Singer | Album | Year | Sale |
The Prodigy | Invaders Must Die | 2008 | 1200000 |
Drowning Pool | Sinner | 2001 | 400000 |
Поделиться в facebook
Поделиться в twitter
Поделиться в vk
VK
Поделиться в google
Google+
Группа в VK
Помощь проекту
Обнаружили опечатку?
Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!
Свежие статьи
Облако меток
Instagram Vk Youtube Telegram Odnoklassniki
Полезно знать
Рубрики
Авторы
© it-black.
ru | 2016 — 2022SQL SELECT TOP 1 –
спросил
Изменено 5 лет, 3 месяца назад
Просмотрено 128 тысяч раз
Я получаю странные результаты из таблицы, из которой выбираю. Рассмотрим следующую таблицу:
USERID TICKETSASSIGNED 1 0 100 0 101 0 102 0 103 0
Теперь, если у меня есть следующий sql, как в:
SELECT TOP 1 USERID ИЗ ТАБЛЕКС ЗАКАЗАТЬ ПО БИЛЕТАМ
Я ожидаю получить результат «1», но чаще всего я получаю «100», вторую запись. Поскольку все значения TICKETSASSIGNED
равны «0», он случайным образом выбирает то, которое, по его мнению, является TOP 1, поскольку это поле, в котором я заказываю. Чтобы получить правильное значение «1» в этом случае, мне также пришлось заказать USERID
.
Есть идеи?
1
Я ожидаю получить результат «1», но чаще всего я получаю «100», вторую запись. Поскольку все значения TICKETSASSINGED равны «0», он случайным образом выбирает тот, который, по его мнению, является TOP 1, поскольку это поле, в котором я заказываю. Чтобы получить правильное значение «1» в этом случае, мне также пришлось заказать на USERID.
Это поведение по умолчанию во всех SQL — порядок не гарантируется, если нет предложения ORDER BY, и в этом случае вы не упорядочиваете соответствующие данные, поэтому база данных произвольно выбирает строку.
Использование:
ЗАКАЗ ПО БИЛЕТАМ, НАЗНАЧЕННЫМ, ID ПОЛЬЗОВАТЕЛЯ
В этом случае вам понадобится второй столбец в предложении ORDER BY
:
SELECT TOP 1 USERID ИЗ ТАБЛЕКС ЗАКАЗ ПО БИЛЕТАМ, НАЗНАЧЕННЫМ, ID ПОЛЬЗОВАТЕЛЯ
Без этого это , вероятно, , дающее вам записи, упорядоченные по TICKETASSIGNED
, а затем по их физическому расположению в таблице, например.
Если вы проверите документацию для TOP
: TOP (Transact-SQL), особенно в первых двух абзацах в разделе «Примечания», прямо указано, что TOP не упорядочивает строки. Таким образом, используется тот порядок, который вы навязали сами себе.
К сожалению, ваш заказ неполный. Только иногда получается производить то, что вы хотите.
Правильный способ — именно то, что вы придумали, нужно заказывать еще и по USERID.
Если вы заказываете только по TICKETSASSIGNED
и все они имеют одинаковые значения, нет причин, по которым какая-либо конкретная запись должна быть возвращена в качестве верхней. Если вы хотите получить лучший, используя USERID
в качестве следующего поля для заказа, тогда да, вы должны просто добавить USERID
в предложение заказа по.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
sql server — Что означает TOP 1 в sql-запросе?
спросил
Изменено 9 лет, 9 месяцев назад
Просмотрено 22к раз
Что означает TOP 1 в запросе sql?
SELECT TOP 1 RequestId ОТ PublisherRequests
- sql-сервер
1
Я не согласен с «Порядок будет определяться на основе кластеризованного ключа в этой таблице».
Электронная документация по SQL Server весьма ясна: Если в запросе нет предложения ORDER BY, порядок строк произвольный
репродукция, демонстрирующая, что это не всегда так: без ORDER BY порядок сортировки по умолчанию отсутствует.
1
Будет выбрана первая строка из таблицы
.
РЕДАКТИРОВАТЬ: [Порядок будет определяться на основе кластерного ключа в этой таблице — это утверждение неверно]. На самом деле, по выводам Алекса и согласно BOL, порядок строк будет произвольным.
Справку можно найти здесь.
2
Запрос в примере вернет первый RequestID
из таблицы PublisherRequests
.
Порядок результатов без 9Пункт 0019 Order By является произвольным. Итак, ваш пример вернет произвольный RequestID
(т. е. первый RequestID
в произвольно упорядоченном списке RequestID
s).