LIMIT controla quantas linhas são retornadas no resultado da sua consulta. As linhas podem ser selecionadas por contagem e offset, ou pelas condições que abrem e fecham um intervalo de linhas com LIMIT ... AFTER ... UNTIL.
Sintaxe básica
Selecione as primeiras linhas:m linhas do resultado, ou todos os registros se houver menos de m.
Sintaxe alternativa de TOP (compatível com o MS SQL Server):
LIMIT m e pode ser usado por compatibilidade com consultas do Microsoft SQL Server.
SELECT com OFFSET:
n linhas e retorna as próximas m linhas.
Em ambas as formas, n e m devem ser inteiros não negativos.
Selecione um intervalo por condições:
start_expr é true, ou desde o início do stream quando AFTER é omitido, até a primeira linha em ou após esse início em que end_expr é true, sem incluí-la; n limita o tamanho desse range. AFTER start_expr ALL abre um range em cada linha correspondente. Veja LIMIT … AFTER … UNTIL abaixo.
Limites negativos
Selecione linhas do fim do conjunto de resultados usando valores negativos:
A sintaxe
LIMIT -n, -m é equivalente a LIMIT -m OFFSET -n.
Limites fracionários
Use valores decimais entre 0 e 1 para selecionar uma porcentagem das linhas:- As frações devem ser valores Float64 maiores que 0 e menores que 1.
- Contagens fracionárias de linhas são arredondadas para o número inteiro seguinte.
Combinando tipos de LIMIT
Você pode combinar inteiros padrão com offsets fracionários ou negativos:LIMIT 3 AFTER start_expr retorna no máximo três linhas a partir do ponto em que o intervalo se abre. OFFSET, contagens fracionárias e negativas e WITH TIES são rejeitados quando usados junto com AFTER ou UNTIL. Uma cláusula LIMIT BY pode preceder um intervalo na mesma consulta, e a configuração limit continua limitando o resultado.
LIMIT … WITH TIES
O modificadorWITH TIES inclui linhas adicionais com os mesmos valores de ORDER BY da última linha dentro do limite. Ele se aplica apenas a limites de contagem e offset e não pode ser combinado com a forma de intervalo.
WITH TIES, todas as linhas com o mesmo último valor são incluídas:
2) da linha 5.
O mesmo acontece quando o offset é especificado com a palavra-chave OFFSET:
1, 1, 2, mas o segundo 2 é incluído porque tem o mesmo valor da última linha.
WITH TIES também funciona com limites e offsets negativos. Ele inclui linhas adicionais com os mesmos valores de ORDER BY da primeira linha selecionada:
WITH TIES, o resultado seria 1, 1, 2, 2. Com WITH TIES, três linhas extras com valor 1 são incluídas porque têm o mesmo valor da primeira linha selecionada.
Esse modificador pode ser combinado com o modificador ORDER BY ... WITH FILL.
LIMIT … AFTER … UNTIL (intervalo por condições)
Você pode limitar o resultado a um intervalo de linhas entre duas condições de fronteira:AFTER start_expr: Inicia a saída a partir da primeira linha em questart_expré true (essa linha é incluída).AFTER start_expr ALL: Gera a união de todos os intervalos correspondentes que começam ondestart_expré true, sem duplicar linhas quando os intervalos se sobrepõem.UNTIL end_expr: Encerra cada intervalo antes da primeira linha, no início dele ou após ele, em queend_expré true (essa linha é excluída).n: Contagem opcional de linhas. SemALL, é o comprimento máximo do único intervalo aberto. ComAFTER ... ALL, é o comprimento de cada intervalo aberto, de modo que o resultado total pode excedern(por exemplo,LIMIT 2 AFTER number IN (2, 6) ALLpode retornar até quatro linhas). Para limitar o número total de linhas do resultado, use o SETTINGlimit, que é aplicado como um limite global após o intervalo.
ORDER BY para controlá-la.
Correspondências de UNTIL anteriores ao início de um intervalo não têm efeito. Se ambas as condições corresponderem à linha inicial, o intervalo fica vazio. Se nenhuma correspondência de UNTIL ocorrer no início ou após ele, o intervalo continua até atingir sua contagem de linhas n ou o fim do stream. Com AFTER ... ALL, correspondências posteriores de AFTER podem abrir novos intervalos depois que um intervalo anterior é encerrado.
Com AFTER e sem ALL, o passo de intervalo avalia AFTER até encontrar um fragmento que contenha uma correspondência inicial. Em seguida, avalia UNTIL nesse fragmento e nos fragmentos subsequentes enquanto o intervalo permanecer aberto. As expressões são avaliadas sobre fragmentos inteiros, portanto UNTIL ainda pode ser avaliado para linhas anteriores ao início dentro do fragmento inicial.
Se UNTIL contiver funções stateful como rowNumberInAllBlocks, ou funções que sejam não determinísticas dentro da consulta, ele é avaliado a partir do primeiro fragmento para preservar o comportamento dessas funções. Sem ALL, AFTER é avaliado apenas até o fragmento inicial; os fragmentos subsequentes avaliam somente UNTIL. Correspondências de fim anteriores ao início continuam sem efeito.
Exemplos:
Primeiras 3 linhas a partir da primeira linha em que number >= 3:
number >= 2 até (exclusive) a primeira linha em que number >= 6:
n, são retornadas todas as linhas desde a correspondência de AFTER até o fim do stream (ou até UNTIL):
n, mas com UNTIL, o intervalo vai da primeira correspondência de AFTER até a primeira correspondência de UNTIL nela ou após ela:
UNTIL anterior ao início é ignorada; aqui, number = 1 não tem efeito, e o intervalo termina antes de number = 6:
ALL e UNTIL, todo intervalo aberto termina após n linhas ou na próxima correspondência de UNTIL, o que ocorrer primeiro; aqui o intervalo aberto em 6 é interrompido por number = 7:
n, uma correspondência de UNTIL fecha o intervalo atual e uma correspondência posterior de AFTER abre um novo, que se estende até o fim quando nenhuma outra correspondência de UNTIL ocorre:
n e sem UNTIL, todo intervalo aberto se estende até o fim do stream, portanto AFTER start_expr ALL retorna as mesmas linhas que AFTER start_expr.
WITH TIES,LIMIT/OFFSETfracionários/negativos eOFFSETnão são suportados em conjunto comAFTER/UNTIL.- O pushdown preliminar de
LIMITé desabilitado quandoAFTER/UNTILé usado. AFTEReUNTILsão reconhecidos como palavras-chave apenas quando são seguidos por uma expressão de fronteira, de modo que um identificador chamadoafterouuntilcontinua funcionando como contagem de linhas (LIMIT after,LIMIT after BY x). Quando as duas leituras são possíveis, a palavra-chave prevalece:LIMIT after(2)é o intervaloLIMIT AFTER (2); escrevaLIMIT (after(2))para chamar uma função chamadaafter.
UNTIL sozinho retorna as linhas desde o início do stream até a primeira linha em que a condição é true:
n, UNTIL sozinho retorna no máximo n linhas a partir do início do stream, parando ainda na primeira correspondência:
LIMIT BY, aplicando-se então às linhas mantidas pelo LIMIT BY:
Considerações
Resultados não determinísticos: Sem a cláusulaORDER BY, as linhas retornadas podem ser arbitrárias e variar entre execuções da consulta.
Limite no servidor: O número de linhas retornadas também pode ser afetado pela configuração limit.
Veja também
- LIMIT BY — Limita o número de linhas por grupo de valores, útil para obter os N principais resultados em cada categoria.