Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

OFFSET FETCH

OFFSET и FETCH позволяют получать данные порциями. Они задают блок строк, который нужно получить одним запросом.

-- 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]

Значение offset_row_count или fetch_row_count может быть числом или литеральной константой. fetch_row_count можно опустить; по умолчанию оно равно 1.

OFFSET задает количество строк, которые нужно пропустить перед тем, как начать возвращать строки из результирующего набора запроса. OFFSET n пропускает первые n строк результата.

Поддерживается и отрицательный OFFSET: OFFSET -n пропускает последние n строк результата.

Также поддерживается дробный OFFSET: OFFSET n — если 0 < n < 1, то пропускаются первые n * 100% результата.

Пример: • OFFSET 0.1 - пропускает первые 10% результата.

Примечание • Дробное значение должно быть числом Float64, меньшим 1 и больше нуля. • Если в результате вычисления получается дробное число строк, оно округляется вверх до следующего целого числа.

FETCH задает максимальное количество строк, которое может содержаться в результате запроса.

Опция ONLY используется для возврата строк, которые идут сразу после строк, пропущенных OFFSET. В этом случае FETCH служит альтернативой выражению LIMIT. Например, следующий запрос

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

совпадает с запросом

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

Опция WITH TIES используется для возврата всех дополнительных строк, которые делят последнее место в результирующем наборе согласно предложению ORDER BY. Например, если fetch_row_count равно 5, но ещё две строки имеют те же значения в столбцах ORDER BY, что и пятая строка, результирующий набор будет содержать семь строк.

Примеры

Исходная таблица:

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

Использование опции 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 │
└───┴───┘

Использование опции 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