LIMIT controla cuántas filas se devuelven en los resultados de la consulta. Las filas pueden seleccionarse por cantidad y desplazamiento, o mediante las condiciones que abren y cierran un rango de filas con LIMIT ... AFTER ... UNTIL.
Sintaxis básica
Seleccionar las primeras filas:m filas del resultado, o todos los registros si hay menos de m.
Sintaxis alternativa de TOP (compatible con MS SQL Server):
LIMIT m y puede utilizarse por compatibilidad con consultas de Microsoft SQL Server.
Selección con OFFSET:
n filas y devuelve las siguientes m.
En ambas formas, n y m deben ser enteros no negativos.
Seleccionar un rango mediante condiciones:
start_expr es true, o desde el inicio del stream cuando se omite AFTER, hasta la primera fila situada en ese inicio o después de él en la que end_expr es true, sin incluirla; n limita la longitud de ese rango. AFTER start_expr ALL abre un rango en cada fila coincidente. Consulte LIMIT … AFTER … UNTIL más abajo.
Límites negativos
Selecciona filas desde el final del conjunto de resultados utilizando valores negativos:
La sintaxis
LIMIT -n, -m equivale a LIMIT -m OFFSET -n.
Límites fraccionarios
Usa valores decimales entre 0 y 1 para seleccionar un porcentaje de filas:- Las fracciones deben ser valores Float64 mayores que 0 y menores que 1.
- Los recuentos fraccionarios de filas se redondean al siguiente número entero.
Combinación de tipos de LIMIT
Puede combinar enteros estándar con OFFSET fraccionarios o negativos:LIMIT 3 AFTER start_expr toma como máximo tres filas desde el punto en que se abre el rango. OFFSET, los recuentos fraccionarios y negativos, y WITH TIES se rechazan si se usan junto con AFTER o UNTIL. Una cláusula LIMIT BY puede preceder a un rango en la misma consulta, y el SETTING limit sigue limitando el resultado.
LIMIT … WITH TIES
El modificadorWITH TIES incluye filas adicionales que tienen los mismos valores de ORDER BY que la última fila incluida por el límite. Solo se aplica a los límites de recuento y de OFFSET, y no puede combinarse con la forma de rango.
WITH TIES, también se incluyen todas las filas que coinciden con el último valor:
2) que la fila 5.
Lo mismo ocurre cuando el OFFSET se especifica con la palabra clave OFFSET:
1, 1, 2, pero se incluye el segundo 2 porque empata con la última fila.
WITH TIES también funciona con límites y OFFSET negativos. Incluye filas adicionales que tienen los mismos valores de ORDER BY que la primera fila seleccionada:
WITH TIES, el resultado sería 1, 1, 2, 2. Con WITH TIES, se incluyen tres filas adicionales con el valor 1 porque empatan con la primera fila seleccionada.
Este modificador puede combinarse con el modificador ORDER BY ... WITH FILL.
LIMIT … AFTER … UNTIL (rango por condiciones)
Puede limitar el resultado a un rango de filas comprendido entre dos condiciones de contorno:AFTER start_expr: comienza la salida desde la primera fila en la questart_expres verdadera (esa fila se incluye).AFTER start_expr ALL: devuelve la unión de todos los rangos coincidentes que comienzan dondestart_expres verdadera, sin duplicar filas cuando los rangos se solapan.UNTIL end_expr: finaliza cada rango antes de la primera fila situada en su inicio o después de él en la queend_expres verdadera (esa fila se excluye).n: recuento opcional de filas. SinALL, es la longitud máxima del único rango abierto. ConAFTER ... ALL, es la longitud de cada rango abierto, por lo que el resultado total puede superarn(por ejemplo,LIMIT 2 AFTER number IN (2, 6) ALLpuede devolver hasta cuatro filas). Para limitar el número total de filas del resultado, utiliza el SETTINGlimit, que se aplica como límite global después del rango.
ORDER BY para controlarlo.
Las coincidencias de UNTIL anteriores al inicio de un rango no tienen efecto. Si ambas condiciones coinciden en la fila inicial, el rango queda vacío. Si no se produce ninguna coincidencia de UNTIL en el inicio o después de él, el rango continúa hasta alcanzar su recuento de filas n o el final del stream. Con AFTER ... ALL, las coincidencias posteriores de AFTER pueden abrir nuevos rangos una vez finalizado un rango anterior.
Con AFTER y sin ALL, el paso de rango evalúa AFTER hasta encontrar un fragmento que contenga una coincidencia de inicio. A continuación, evalúa UNTIL en ese fragmento y en los fragmentos siguientes mientras el rango permanezca abierto. Las expresiones se evalúan sobre fragmentos completos, por lo que UNTIL puede evaluarse incluso para filas anteriores al inicio dentro del fragmento inicial.
Si UNTIL contiene funciones con estado como rowNumberInAllBlocks, o funciones no deterministas dentro de la consulta, se evalúa desde el primer fragmento para preservar el comportamiento de dichas funciones. Sin ALL, AFTER se evalúa únicamente hasta el fragmento inicial; en los fragmentos siguientes solo se evalúa UNTIL. Las coincidencias de fin anteriores al inicio siguen sin tener efecto.
Ejemplos:
Las 3 primeras filas a partir de la primera fila en la que number >= 3:
number >= 2 hasta (sin incluirla) la primera fila donde number >= 6:
n, se devuelven todas las filas desde la coincidencia de AFTER hasta el final del stream (o hasta UNTIL):
n pero con UNTIL, el rango se extiende desde la primera coincidencia de AFTER hasta la primera coincidencia de UNTIL que se produzca en esa misma posición o después de ella:
UNTIL anterior al inicio se ignora; aquí number = 1 no tiene efecto y el rango termina antes de number = 6:
ALL y UNTIL, cada rango abierto termina al alcanzar sus n filas o en la siguiente coincidencia de UNTIL, lo que ocurra primero; aquí el rango abierto en 6 queda cortado por number = 7:
n, una coincidencia de UNTIL cierra el rango actual y una coincidencia posterior de AFTER abre uno nuevo, que se extiende hasta el final cuando no le sigue ninguna otra coincidencia de UNTIL:
n y sin UNTIL, cada rango abierto se extiende hasta el final del stream, por lo que AFTER start_expr ALL devuelve las mismas filas que AFTER start_expr.
WITH TIES, los valores fraccionarios o negativos deLIMIT/OFFSET, yOFFSETno son compatibles junto conAFTER/UNTIL.- El pushdown preliminar de
LIMITse deshabilita cuando se usaAFTER/UNTIL. AFTERyUNTILsolo se reconocen como palabras clave cuando les sigue una expresión de límite, por lo que un identificador llamadoafterountilsigue funcionando como recuento de filas (LIMIT after,LIMIT after BY x). Cuando ambas lecturas son posibles, prevalece la palabra clave:LIMIT after(2)corresponde al rangoLIMIT AFTER (2); escribaLIMIT (after(2))para llamar a una función denominadaafter.
UNTIL por sí solo devuelve las filas desde el inicio del stream hasta la primera fila en la que la condición es true:
n, UNTIL por sí solo devuelve como máximo n filas desde el inicio del stream, deteniéndose igualmente en la primera coincidencia:
LIMIT BY, en cuyo caso se aplica a las filas que LIMIT BY conserva:
Consideraciones
Resultados no deterministas: Sin una cláusulaORDER BY, las filas devueltas pueden ser arbitrarias y variar de una ejecución de la consulta a otra.
Límite del servidor: La cantidad de filas devueltas también puede verse afectada por la configuración limit.
Véase también
- LIMIT BY — Limita el número de filas por cada grupo de valores; resulta útil para obtener los N resultados principales dentro de cada categoría.