Перейти к основному содержанию
Перейти к основному содержанию

Оператор LIMIT

LIMIT m позволяет выбрать первые m строк из результата.

LIMIT n, m позволяет выбрать m строк из результата после пропуска первых n строк. Синтаксис LIMIT m OFFSET n эквивалентен.

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

Дополнительно поддерживаются отрицательные значения лимита:

LIMIT -m выбирает последние m строк из результата.

LIMIT -m OFFSET -n выбирает последние m строк после пропуска последних n строк. Синтаксис LIMIT -n, -m эквивалентен.

Также поддерживается выбор доли результата:

LIMIT m — если 0 < m < 1, то возвращаются первые m * 100% строк.

LIMIT m OFFSET n — если 0 < m < 1 и 0 < n < 1, то возвращаются первые m * 100% результата после пропуска первых n * 100% строк. Синтаксис LIMIT n, m эквивалентен.

Примеры: • LIMIT 0.1 — выбирает первые 10% результата. • LIMIT 1 OFFSET 0.5 — выбирает медианную строку. • LIMIT 0.25 OFFSET 0.5 — выбирает третий квартиль результата.

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

Примечание • Можно комбинировать стандартный LIMIT с дробным OFFSET и наоборот. • Можно комбинировать стандартный LIMIT с отрицательным OFFSET и наоборот.

Если оператор ORDER BY явно не сортирует результат, выбор строк в результирующем наборе может быть произвольным и недетерминированным.

:::note
Количество строк в результирующем наборе также может зависеть от настройки limit. :::

Модификатор LIMIT ... WITH TIES

Когда вы задаёте модификатор WITH TIES для LIMIT n[,m] и указываете ORDER BY expr_list, в результате вы получите первые n строк или диапазон n,m строк, а также все строки с такими же значениями полей в ORDER BY, как у строки на позиции n для LIMIT n и m для LIMIT n,m соответственно.

Примечание
• В настоящее время WITH TIES не поддерживается с отрицательным значением LIMIT.

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

Например, следующий запрос

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" в поле n, что и строка 5