Оператор 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
, включите настройку 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
).