LIMIT n BY expressions selecciona las primeras n filas para cada valor distinto de expressions. La clave de LIMIT BY puede contener cualquier cantidad de expresiones.
ClickHouse admite las siguientes variantes de sintaxis:
LIMIT [offset_value, ]n BY expressionsLIMIT n OFFSET offset_value BY expressions
LIMIT n BY expressions y devuelve las primeras n filas para cada combinación distinta de expressions. Si se especifica OFFSET, para cada bloque de datos que pertenezca a una combinación distinta de expressions, ClickHouse omite offset_value filas desde el inicio del bloque y devuelve como resultado un máximo de n filas. Si offset_value es mayor que el número de filas del bloque de datos, ClickHouse no devuelve ninguna fila de ese bloque.
LIMIT BY no está relacionado con LIMIT. Ambos pueden usarse en la misma consulta. Esto incluye la forma de intervalo LIMIT ... AFTER ... UNTIL, que se aplica entonces a las filas que conserva LIMIT BY.LIMIT BY, habilite la configuración enable_positional_arguments.
Ejemplos
Tabla de ejemplo:SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id devuelve el mismo resultado.
La siguiente consulta devuelve los 5 principales sitios de referencia para cada par domain, device_type, con un máximo de 100 filas en total (LIMIT n BY + LIMIT).
LIMIT BY también funciona con límites y offsets negativos. Al igual que la cláusula LIMIT negativa, puede usar valores negativos con LIMIT BY para seleccionar filas desde el final de cada grupo.
id. Para id = 1, obtenemos las filas 11 y 12; para id = 2, se devuelven ambas filas porque el grupo solo tiene 2 filas.
id: el OFFSET -1 al final descarta la última fila de cada grupo, y el -1 inicial conserva luego la última fila de lo que queda.
También se pueden mezclar LIMIT y OFFSET con signos distintos. Por ejemplo, para descartar la primera fila de cada grupo y luego conservar las 2 últimas de lo que queda:
id = 1, se omite la primera fila (10); se devuelven las 2 últimas, 11 y 12. Para id = 2, se omite la primera fila (20), por lo que solo queda 21.
LIMIT BY ALL
LIMIT BY ALL equivale a enumerar todas las expresiones del SELECT que no son funciones de agregación.
Por ejemplo:
LIMIT BY contendrán el máximo de campos no agregados que podamos extraer de ella.
Por ejemplo:
Ejemplos
Tabla de ejemplo:SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id devuelve el mismo resultado.
Con LIMIT BY ALL: