En SQL Server, puede usar el TOP
cláusula para limitar las filas devueltas de una consulta a un determinado porcentaje del conjunto de resultados.
Por ejemplo, podría devolver el 10% superior de los resultados, o cualquier porcentaje que necesite.
Ejemplo 1:el conjunto de resultados completo
Primero, devolvamos el 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 | +-----------+--------------------------+
Así que hay 22 filas en el conjunto de resultados completo.
Ejemplo 2:devolver el 10 % superior de los resultados
Ahora devolvamos el 10 por ciento superior de esos resultados:
SELECT TOP(10) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
+-----------+-----------------------+ | AlbumId | AlbumName | |-----------+-----------------------| | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | +-----------+-----------------------+
En este caso, se devuelven tres filas.
Podrías notar que el 10 por ciento de 22 es en realidad 2.2 (no 3). Obviamente, SQL Server no puede presentar 2,2 filas, por lo que redondea los resultados.
Ejemplo 2:redondeo hacia arriba en lugar de hacia abajo
En caso de que se pregunte por qué SQL Server no redondea los resultados hacia abajo siempre que la parte fraccionaria sea menor que 5, fíjate en el siguiente ejemplo.
SELECT TOP(1) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
+-----------+-------------+ | AlbumId | AlbumName | |-----------+-------------| | 1 | Powerslave | +-----------+-------------+
Recuerde que el conjunto de resultados completo tenía 22 filas, por lo que el 1 por ciento de 22 filas significaría que se deben devolver 0,22 filas.
Y esta es precisamente la razón por la que no nos gustaría ser redondeados. Si se redondean 0,22 filas hacia abajo, no se devolvería ninguna fila, lo que nos llevaría incorrectamente a concluir que no hubo coincidencias para nuestra consulta.
Ejemplo 3:cero por ciento
Como era de esperar, usar 0 por ciento devolverá cero filas.
SELECT TOP(0) PERCENT AlbumId, AlbumName FROM Albums ORDER BY AlbumId;
Resultado:
(0 rows affected)
Ejemplo 4:Porcentaje máximo
Solo puede proporcionar valores porcentuales entre 0 y 100.
Aquí hay un ejemplo de intentar usar un valor superior a 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.
Ejemplo 5:porcentajes negativos
Como se mencionó, los valores porcentuales deben estar entre 0 y 100, por lo que obtendrá un error si proporciona un porcentaje negativo.
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.