Limitar os resultados classificados

Concluído

A cláusula TOP é uma extensão proprietária da Microsoft da cláusula SELECT. TOP permitirá especificar quantas linhas serão retornadas, como um inteiro positivo ou como uma porcentagem de todas as linhas qualificadas. O número de linhas pode ser especificado como uma constante ou como uma expressão. TOP é geralmente utilizado com um ORDER BY, mas pode ser usado com dados não ordenados.

Usando a cláusula TOP

A sintaxe simplificada da cláusula TOP, usada com ORDER BY, é a seguinte:

SELECT TOP (N) <column_list>
FROM <table_source>
WHERE <search_condition>
ORDER BY <order list> [ASC|DESC];

Por exemplo, para recuperar apenas os 10 produtos mais caros da tabela Production.Product, use a seguinte consulta:

SELECT TOP 10 Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

Os resultados podem ser do tipo:

Nome

ListPrice

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

O operador TOP depende de uma cláusula ORDER BY para fornecer precedência significativa às linhas selecionadas. TOP pode ser usado sem ORDER BY, mas, nesse caso, não há como prever que linhas serão retornadas. Neste exemplo, quaisquer 10 pedidos poderiam ser retornados se não houvesse uma cláusula ORDER BY.

Usando WITH TIES

Além de especificar um número fixo de linhas a serem retornadas, a palavra-chave TOP também aceita a opção WITH TIES, que recuperará todas as linhas com valores que possam ser encontrados nas N primeiras linhas selecionadas.

No exemplo anterior, a consulta retornou os primeiros 10 produtos em ordem decrescente de preço. No entanto, adicionando a opção WITH TIES à cláusula TOP, você verá que mais linhas se qualificam para inclusão nos 10 principais produtos mais caros:

SELECT TOP 10 WITH TIES Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;

Essa consulta modificada retorna os resultados a seguir:

Nome

ListPrice

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

A decisão de incluir WITH TIES dependerá do seu conhecimento dos dados de origem, do seu potencial para valores exclusivos e dos requisitos da consulta que você está escrevendo.

Usando PERCENT

Para retornar uma porcentagem das linhas qualificadas, use a opção PERCENT com TOP em vez de um número fixo.

SELECT TOP 10 PERCENT Name, ListPrice
FROM SalesLT.Product
ORDER BY ListPrice DESC;

A porcentagem também pode ser usada com a opção WITH TIES.

Observação

Para fins de contagem de linhas, TOP (N) PERCENT irá arredondar para cima até o inteiro mais próximo.

A opção TOP é usada por muitos profissionais de SQL Server, como um método para recuperar apenas um determinado intervalo de linhas. No entanto, considere os seguintes fatos ao usar TOP:

  • O TOP é propriedade do T-SQL.
  • A opção TOP sozinha não dá suporte para pular linhas.
  • Como TOP depende de uma cláusula ORDER BY, você não pode usar uma ordem de classificação para estabelecer as linhas filtradas pelo TOP e outra para determinar a ordem de saída.