Секция LIMIT BY
Запрос с секцией LIMIT n BY expressions
выбирает первые n
строк для каждого отличного значения expressions
. Ключ LIMIT BY
может содержать любое количество выражений.
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
).
Запрос выберет топ 5 рефереров для каждой пары domain, device_type
, но не более 100 строк (LIMIT n BY + LIMIT
).
LIMIT n BY
работает с NULL как если бы это было конкретное значение. Т.е. в результате запроса пользователь получит все комбинации полей, указанных в BY
.