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 expressionsLIMIT n OFFSET offset_value BY expressions
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. Isso inclui a forma de intervalo LIMIT ... AFTER ... UNTIL, que então se aplica às linhas mantidas por LIMIT BY.LIMIT BY, ative a configuração enable_positional_arguments.
Exemplos
Tabela de exemplo: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.
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.
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:
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
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:
LIMIT BY conterão o máximo de campos não agregados que conseguirmos extrair dela.
Por exemplo:
Exemplos
Tabela de exemplo:SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id retorna o mesmo resultado.
Usando LIMIT BY ALL: