LIMIT BY Клаузула
Запрос с клаузулой LIMIT n BY expressions выбирает первые n строк для каждого уникального значения expressions. Ключ для LIMIT BY может содержать любое количество выражений.
ClickHouse поддерживает следующие варианты синтаксиса:
LIMIT [offset_value, ]n BY expressionsLIMIT 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).