Limitación de los resultados ordenados

Completado

La cláusula TOP es una extensión propiedad de Microsoft de la cláusula SELECT. La cláusula TOP le permitirá especificar cuántas filas se van a devolver, ya sea como un entero positivo o como un porcentaje de todas las filas calificadas. El número de filas se puede especificar como una constante o como una expresión. La cláusula TOP se usa con más frecuencia con ORDER BY, pero se puede usar con datos no ordenados.

Usar la cláusula TOP

La sintaxis simplificada de la cláusula TOP, que se usa con ORDER BY, es la siguiente:

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

Por ejemplo, para recuperar solo los 10 productos más costosos de la tabla Production.Product, use la consulta siguiente:

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

El resultado podría ser similar al siguiente:

Nombre

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

El operador TOP depende de una cláusula ORDER BY para proporcionar una prioridad significativa a las filas seleccionadas. TOP se puede usar sin ORDER BY pero, en ese caso, no hay ninguna manera de predecir qué filas se devolverán. En este ejemplo, se podrían devolver 10 pedidos cualesquiera si no hubiese una cláusula ORDER BY.

Uso de WITH TIES

Además de especificar un número fijo de filas que se van a devolver, la palabra clave TOP también acepta la opción WITH TIES, que recuperará las filas con valores que puedan encontrarse en las primeras N filas seleccionadas.

En el ejemplo anterior, la consulta devolvió los 10 primeros productos en orden descendente de precio. Sin embargo, al agregar la opción WITH TIES a la cláusula TOP, verá que hay más filas que se pueden incluir en los 10 productos más caros:

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

Esta consulta modificada devuelve los resultados siguientes:

Nombre

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

La decisión de incluir WITH TIES dependerá de cuánto conozca los datos de origen, su potencial para valores únicos y los requisitos de la consulta que escribe.

Uso de PERCENT

Para devolver un porcentaje de las filas aptas, use la opción PERCENT con TOP en lugar de un número fijo.

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

La opción PERCENT también se puede usar con la opción WITH TIES.

Nota:

Para el recuento de filas, TOP (N) PERCENT se redondeará hacia arriba al entero más cercano.

La opción TOP la usan muchos profesionales de SQL Server como método para recuperar solo un determinado intervalo de filas. Sin embargo, tenga en cuenta estos hechos al usar TOP:

  • TOP es propiedad de T-SQL.
  • TOP por sí solo no admite la omisión de filas.
  • Como TOP depende de una cláusula ORDER BY, no se puede usar un criterio de ordenación para establecer las filas filtradas por TOP y otra para determinar el orden de salida.