Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

OFFSET FETCH

OFFSET e FETCH permitem recuperar dados em partes. Eles especificam um bloco de linhas que você deseja obter em uma única consulta.

-- SQL Standard style:
[OFFSET offset_row_count {ROW | ROWS}] [FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}]

-- MySQL/PostgreSQL style:
[LIMIT [n, ]m] [OFFSET offset_row_count]

O valor de offset_row_count ou fetch_row_count pode ser um número ou uma constante literal. Você pode omitir fetch_row_count; por padrão, ele é igual a 1.

OFFSET especifica o número de linhas que devem ser ignoradas antes de começar a retornar linhas do conjunto de resultados da consulta. OFFSET n ignora as primeiras n linhas do resultado.

OFFSET negativo é suportado: OFFSET -n ignora as últimas n linhas do resultado.

OFFSET fracionário também é suportado: OFFSET n — se 0 < n < 1, então os primeiros n * 100% do resultado são ignorados.

Exemplo: • OFFSET 0.1 — ignora os primeiros 10% do resultado.

Observação • A fração deve ser um número Float64 menor que 1 e maior que zero. • Se o cálculo resultar em um número fracionário de linhas, ele será arredondado para cima até o próximo número inteiro.

O FETCH especifica o número máximo de linhas que podem estar no resultado de uma consulta.

A opção ONLY é usada para retornar linhas que vêm imediatamente após as linhas omitidas pelo OFFSET. Nesse caso, FETCH é uma alternativa à cláusula LIMIT. Por exemplo, a consulta a seguir

SELECT * FROM test_fetch ORDER BY a OFFSET 1 ROW FETCH FIRST 3 ROWS ONLY;

é idêntica à consulta

SELECT * FROM test_fetch ORDER BY a LIMIT 3 OFFSET 1;

A opção WITH TIES é usada para retornar linhas adicionais empatadas na última posição do conjunto de resultados, de acordo com a cláusula ORDER BY. Por exemplo, se fetch_row_count estiver definido como 5, mas duas linhas adicionais tiverem os mesmos valores nas colunas de ORDER BY da quinta linha, o conjunto de resultados conterá sete linhas.

Exemplos

Tabela de entrada:

┌─a─┬─b─┐
│ 1 │ 1 │
│ 2 │ 1 │
│ 3 │ 4 │
│ 1 │ 3 │
│ 5 │ 4 │
│ 0 │ 6 │
│ 5 │ 7 │
└───┴───┘

Uso da opção ONLY:

Querysql
SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS ONLY;
Responsetext
┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
└───┴───┘

Uso da opção WITH TIES:

Querysql
SELECT * FROM test_fetch ORDER BY a OFFSET 3 ROW FETCH FIRST 3 ROWS WITH TIES;
Responsetext
┌─a─┬─b─┐
│ 2 │ 1 │
│ 3 │ 4 │
│ 5 │ 4 │
│ 5 │ 7 │
└───┴───┘
Navigation