No SQL Server, você pode usar o
TOP
cláusula para limitar as linhas retornadas de uma consulta a uma determinada porcentagem do conjunto de resultados. Por exemplo, você pode retornar os 10% principais dos resultados ou qualquer porcentagem necessária.
Exemplo 1 – O conjunto de resultados completo
Primeiro, vamos retornar o conjunto de resultados completo:
SELECT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
+-----------+--------------------------+ | AlbumId | AlbumName | |-----------+--------------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | | 21 | Yo Wassup | | 22 | Busted | +-----------+--------------------------+
Portanto, há 22 linhas no conjunto de resultados completo.
Exemplo 2 – Retorne os 10% melhores dos resultados
Agora vamos retornar os 10% principais desses resultados:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
Nesse caso, três linhas são retornadas.
Você pode notar que 10% de 22 é na verdade 2,2 (não 3). Obviamente, o SQL Server não pode apresentar 2,2 linhas, então arredonda os resultados.
Exemplo 2 – Arredondando para cima em vez de para baixo
Caso você esteja se perguntando por que o SQL Server não arredonda os resultados para baixo sempre que a parte fracionária for menor que 5, dê uma olhada no exemplo a seguir.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Lembre-se de que o conjunto de resultados completo tinha 22 linhas, portanto, 1% de 22 linhas significaria que 0,22 linhas deveriam ser retornadas.
E é precisamente por isso que não gostaríamos de ser arredondados para baixo. Se 0,22 linhas forem arredondadas para baixo, nenhuma linha será retornada, levando-nos incorretamente a concluir que não houve correspondências para nossa consulta.
Exemplo 3 – Zero Percentual
Como você pode esperar, usar 0 por cento retornará zero linhas.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
(0 rows affected)
Exemplo 4 - Porcentagem máxima
Você só pode fornecer valores percentuais entre 0 e 100.
Aqui está um exemplo de tentativa de usar um valor maior que 100:
SELECT TOP(120) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
Msg 1031, Level 15, State 1, Line 2 Percent values must be between 0 and 100.
Exemplo 5 – Porcentagens negativas
Conforme mencionado, os valores percentuais devem estar entre 0 e 100, portanto, você receberá um erro se fornecer uma porcentagem negativa.
SELECT TOP(-10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
Msg 1031, Level 15, State 1, Line 3 Percent values must be between 0 and 100.