Оператор 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 — 2022
SQL 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).
