Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

LIMIT

Оператор LIMIT задаёт количество строк, возвращаемых в результатах запроса.

Основной синтаксис

Выбор первых строк:

LIMIT m

Возвращает первые m строк результата или все записи, если их меньше m.

Альтернативный синтаксис TOP (совместимый с MS SQL Server):

-- SELECT TOP число|процент имя_столбца(ов) FROM имя_таблицы
SELECT TOP 10 * FROM numbers(100);
SELECT TOP 0.1 * FROM numbers(100);

Это эквивалентно LIMIT m и может использоваться для совместимости с запросами Microsoft SQL Server.

Выборка с OFFSET:

LIMIT m OFFSET n
-- или эквивалентно:
LIMIT n, m

Пропускает первые n строк, затем возвращает следующие m строк.

В обеих формах n и m должны быть неотрицательными целыми числами.

Отрицательные ограничения

Выбирайте строки из конца результирующего набора, используя отрицательные значения:

Синтаксис Результат
LIMIT -m Последние m строк
LIMIT -m OFFSET -n Последние m строк после пропуска последних n строк
LIMIT m OFFSET -n Первые m строк после пропуска последних n строк
LIMIT -m OFFSET n Последние m строк после пропуска первых n строк

Синтаксис LIMIT -n, -m эквивалентен LIMIT -m OFFSET -n.

Дробные лимиты

Используйте десятичные значения от 0 до 1, чтобы выбрать процент строк:

Синтаксис Результат
LIMIT 0.1 Первые 10% строк
LIMIT 1 OFFSET 0.5 Медианная строка
LIMIT 0.25 OFFSET 0.5 Третий квартиль (25% строк после пропуска первых 50%)

Комбинирование типов LIMIT

Можно сочетать стандартные целые числа с дробными или отрицательными смещениями:

LIMIT 10 OFFSET 0.5    -- 10 строк начиная с середины
LIMIT 10 OFFSET -20    -- 10 строк после пропуска последних 20

LIMIT … WITH TIES

Модификатор WITH TIES включает дополнительные строки, у которых значения ORDER BY совпадают со значениями последней строки в пределах заданного ограничения.

SELECT * FROM (
    SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
└───┘

При использовании WITH TIES включаются все строки с тем же значением, что и последнее:

SELECT * FROM (
    SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5 WITH TIES
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘

Строка 6 включена, потому что у неё такое же значение (2), как и у строки 5.

То же самое происходит, когда смещение задаётся с помощью ключевого слова OFFSET:

SELECT * FROM (
    SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 3 OFFSET 2 WITH TIES
┌─n─┐
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘

Если пропустить первые 2 строки и взять 3, обычно вернутся 1, 1, 2, но в результат также попадёт вторая 2, потому что её значение совпадает со значением последней строки.

WITH TIES также работает с отрицательными LIMIT и OFFSET. В этом случае он включает дополнительные строки, у которых значения ORDER BY совпадают со значениями первой выбранной строки:

SELECT number % 3 AS n FROM numbers(15)
ORDER BY n LIMIT -4 OFFSET -3 WITH TIES
┌─n─┐
│ 1 │
│ 1 │
│ 1 │
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘

Без WITH TIES результат был бы 1, 1, 2, 2. При использовании WITH TIES включаются ещё три строки со значением 1, поскольку их значения совпадают со значением первой выбранной строки.

Этот модификатор можно использовать вместе с модификатором ORDER BY ... WITH FILL.

Важные замечания

Недетерминированные результаты: Без предложения ORDER BY возвращаемые строки могут быть произвольными и отличаться от одного выполнения запроса к другому.

Ограничение на стороне сервера: На количество возвращаемых строк также может влиять настройка limit.

См. также

  • LIMIT BY — Ограничивает число строк для каждой группы значений; полезно, когда нужно получить топ-N результатов в каждой категории.
Navigation