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

Оператор LIMIT BY

Запрос с оператором LIMIT n BY expressions выбирает первые n строк для каждого уникального значения expressions. Ключ для LIMIT BY может содержать любое количество expressions.

ClickHouse поддерживает следующие синтаксические варианты:

  • LIMIT [offset_value, ]n BY expressions
  • LIMIT n OFFSET offset_value BY expressions

В процессе обработки запроса ClickHouse выбирает данные, упорядоченные по ключу сортировки. Ключ сортировки устанавливается явно с использованием оператора ORDER BY или неявно как свойство движка таблицы (порядок строк гарантируется только при использовании ORDER BY; в противном случае блочные строки не будут упорядочены из-за многопоточности). Затем ClickHouse применяет LIMIT n BY expressions и возвращает первые n строк для каждой уникальной комбинации expressions. Если указано OFFSET, то для каждого блока данных, принадлежащего уникальной комбинации expressions, ClickHouse пропускает offset_value количество строк с начала блока и возвращает максимум n строк в результате. Если offset_value больше, чем количество строк в блоке данных, ClickHouse возвращает ноль строк из блока.

примечание

LIMIT BY не связан с LIMIT. Оба могут использоваться в одном запросе.

Если вы хотите использовать номера столбцов вместо имен столбцов в операторе LIMIT BY, включите настройку enable_positional_arguments.

Примеры

Пример таблицы:

Запросы:

Запрос SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id возвращает такой же результат.

Следующий запрос возвращает топ 5 рефереров для каждой пары domain, device_type с максимумом 100 строк всего (LIMIT n BY + LIMIT).