Uma consulta com a cláusula LIMIT n BY expressions seleciona as primeiras n linhas para cada valor distinto de expressions. A chave de LIMIT BY pode conter qualquer quantidade de expressões.
O ClickHouse oferece suporte às seguintes variantes de sintaxe:
LIMIT [offset_value, ]n BY expressions
LIMIT n OFFSET offset_value BY expressions
Durante o processamento da consulta, o ClickHouse seleciona os dados ordenados pela chave de ordenação. A chave de ordenação é definida explicitamente com uma cláusula ORDER BY ou implicitamente como uma propriedade do engine da tabela (a ordem das linhas só é garantida ao usar ORDER BY; caso contrário, os blocos de linhas não estarão ordenados devido ao multithreading). Em seguida, o ClickHouse aplica LIMIT n BY expressions e retorna as primeiras n linhas para cada combinação distinta de expressions. Se OFFSET for especificado, então, para cada bloco de dados que pertença a uma combinação distinta de expressions, o ClickHouse pula offset_value linhas a partir do início do bloco e retorna, no máximo, n linhas como resultado. Se offset_value for maior que o número de linhas no bloco de dados, o ClickHouse não retorna nenhuma linha desse bloco.
LIMIT BY não está relacionado a LIMIT. Ambos podem ser usados na mesma consulta.
Se você quiser usar números de colunas em vez de nomes de colunas na cláusula LIMIT BY, ative a configuração enable_positional_arguments.
Tabela de exemplo:
Consultas:
A consulta SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id retorna o mesmo resultado.
A consulta a seguir retorna as 5 principais origens de referência para cada par domain, device_type, com no máximo 100 linhas no total (LIMIT n BY + LIMIT).
LIMIT BY também funciona com limites e offsets negativos. Assim como na cláusula LIMIT com valores negativos, você pode usar valores negativos com LIMIT BY para selecionar linhas do final de cada grupo.
Retorna as últimas 2 linhas de cada id. Para id = 1, obtemos as linhas 11 e 12; para id = 2, ambas as linhas são retornadas porque o grupo tem apenas 2 linhas.
Retorna a penúltima linha de cada id: o OFFSET -1 no final descarta a última linha de cada grupo, e o -1 no início mantém então a última linha do que restou.
Também é possível misturar LIMIT e OFFSET com sinais diferentes. Por exemplo, para descartar a primeira linha de cada grupo e depois manter as 2 últimas do que restou:
Para id = 1, a primeira linha (10) é ignorada; as 2 últimas de 11, 12 são retornadas. Para id = 2, a primeira linha (20) é ignorada, restando apenas 21.
LIMIT BY ALL equivale a listar todas as expressões selecionadas no SELECT que não são funções de agregação.
Por exemplo:
é igual a
Em um caso especial em que uma função tenha tanto funções de agregação quanto outros campos como argumentos, as chaves de LIMIT BY conterão o máximo de campos não agregados que conseguirmos extrair dela.
Por exemplo:
é igual a
Tabela de exemplo:
Consultas:
A consulta SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id retorna o mesmo resultado.
Usando LIMIT BY ALL:
Isso equivale a:
Última modificação em 1 de julho de 2026