Limitar os resultados ordenados

Concluído

A cláusula TOP é uma extensão da cláusula SELECT de propriedade da Microsoft. TOP permitirá que você especifique quantas linhas retornar, seja 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 é usado com mais frequência com um ORDER BY, mas pode ser usado com dados não ordenados.

Utilização da 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 mais ou menos assim:

Nome

PreçoListado

Estrada-150 Vermelho, 62

3578.27

Road-150 Vermelho, 44

3578.27

Estrada-150 Vermelho, 48

3578.27

Estrada-150 Vermelho, 52

3578.27

Estrada-150 Vermelho, 56

3578.27

Montanha 100 Prateado, 38

3399.99

Montanha 100 Prateado, 42

3399.99

Montanha 100 Prateado, 44

3399.99

Montanha 100 Prateado, 48

3399.99

Montanha-100 Preto, 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 quais linhas serão retornadas. Neste exemplo, quaisquer 10 pedidos podem ser devolvidos se não houver uma cláusula ORDER BY.

Usando COM LAÇOS

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á quaisquer linhas com valores que possam ser encontrados nas N linhas superiores selecionadas.

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

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

Esta consulta modificada retorna os seguintes resultados:

Nome

PreçoListado

Estrada-150 Vermelho, 62

3578.27

Road-150 Vermelho, 44

3578.27

Estrada-150 Vermelho, 48

3578.27

Estrada-150 Vermelho, 52

3578.27

Estrada-150 Vermelho, 56

3578.27

Montanha 100 Prateado, 38

3399.99

Montanha 100 Prateado, 42

3399.99

Montanha 100 Prateado, 44

3399.99

Montanha 100 Prateado, 48

3399.99

Montanha-100 Preto, 38

3374.99

Montanha 100 Preto, 42

3374.99

Montanha 100 Preto, 44

3374.99

Montanha 100 Preto, 48

3374.99

A decisão de incluir WITH TIES dependerá do seu conhecimento dos dados de origem, do seu potencial para valores únicos e dos requisitos da consulta que está a escrever.

Usando PORCENTAGEM

Para retornar uma porcentagem das linhas qualificadas, use a opção PORCENTAGEM com TOPO 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.

Nota

Para efeitos de contagem de linhas, TOP (N) PERCENT arredondará para cima para o número inteiro mais próximo.

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

  • TOP é propriedade do T-SQL.
  • O TOP por si só não suporta pular linhas.
  • Como TOP depende de uma cláusula ORDER BY, não é possível usar uma ordem de classificação para estabelecer as linhas filtradas por TOP e outra para determinar a ordem de saída.