Ограничивать отсортированные результаты.
Предложение TOP — это собственное расширение корпорации Майкрософт предложения SELECT. Предложение TOP позволяет указать, сколько строк нужно вернуть либо в виде положительного целого числа, либо в качестве процента от всех выбранных строк. Количество строк можно указать в качестве константы либо выражения. Предложение TOP чаще всего используется с предложением ORDER BY. Однако его можно использовать с неупорядоченными данными.
Использование предложения TOP
Упрощенный синтаксис предложения TOP, используемого с предложением ORDER BY, выглядит следующим образом:
SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];
Например, чтобы получить список 10 самых дорогих продуктов из таблицы Production.Product, используйте следующий запрос:
SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
Результат должен выглядеть примерно следующим образом:
Имя.
ПрейскурантнаяЦена
Road-150 Red, 62
3578,27
Road-150 Red, 44
3578,27
Road-150 Red, 48
3578,27
Road-150 Red, 52
3578,27
Road-150 Red, 56
3578,27
Mountain-100 Silver, 38
3399,99
Mountain-100 Silver, 42
3399,99
Mountain-100 Silver, 44
3399,99
Mountain-100 Silver, 48
3399,99
Mountain-100 Black, 38
3374,99
Оператор TOP зависит от предложения ORDER BY, чтобы обеспечить значимый приоритет для выбранных строк. TOP можно использовать без предложения ORDER BY, но в этом случае невозможно предсказать, какие строки будут возвращены. В этом примере, если бы не было указано предложение ORDER BY, могли быть возвращены любые 10 заказов.
Использование предложения WITH TIES
Помимо указания фиксированного количества возвращаемых строк, ключевое слово TOP также принимает параметр WITH TIES, который извлекает все строки со значениями, которые могут быть найдены в выбранных первых N строках.
В предыдущем примере запрос вернул первые 10 продуктов в порядке убывания цен. Однако, добавив параметр WITH TIES в предложение TOP, вы увидите, что в первые 10 самых дорогих продуктов можно включить больше строк:
SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
Этот измененный запрос возвращает следующие результаты:
Имя.
ПрейскурантнаяЦена
Road-150 Red, 62
3578,27
Road-150 Red, 44
3578,27
Road-150 Red, 48
3578,27
Road-150 Red, 52
3578,27
Road-150 Red, 56
3578,27
Mountain-100 Silver, 38
3399,99
Mountain-100 Silver, 42
3399,99
Mountain-100 Silver, 44
3399,99
Mountain-100 Silver, 48
3399,99
Mountain-100 Black, 38
3374,99
Mountain-100 Black, 42
3374,99
Mountain-100 Black, 44
3374,99
Mountain-100 Black, 48
3374,99
Решение о включении WITH TIES будет зависеть от ваших знаний исходных данных, их потенциале для уникальных значений и требований создаваемого вами запроса.
Использование предложения PERCENT
Чтобы возвратить процент доступных строк, используйте параметр PERCENT с TOP вместо фиксированного числа.
SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;
PERCENT может также использоваться с параметром WITH TIES.
Примечание.
При подсчете количества строк значение TOP (N) PERCENT будет округляться до ближайшего целого числа.
Параметр TOP используется многими специалистами по SQL Server в качестве метода получения только определенного диапазона строк. Однако при использовании параметра TOP принимайте во внимание следующие факты:
- TOP является собственным параметром T-SQL.
- TOP не имеет внутренней поддержки пропуска записей.
- Так как параметр TOP зависит от предложения ORDER BY, нельзя использовать один порядок сортировки для установки строк, отфильтрованных с помощью параметра TOP, а второй — для определения порядка вывода.