跳到主要内容
跳到主要内容

LIMIT BY 子句

带有 LIMIT n BY expressions 子句的查询为每个独特的 expressions 值选择前 n 行。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,并返回每个独特的 expressions 组合的前 n 行。如果指定了 OFFSET,那么对于属于独特 expressions 组合的每个数据块,ClickHouse 从块的开头跳过 offset_value 行,并返回最多 n 行作为结果。如果 offset_value 大于数据块中的行数,ClickHouse 将从块中返回零行。

备注

LIMIT BYLIMIT 无关。它们可以在同一查询中同时使用。

如果您希望在 LIMIT BY 子句中使用列编号而不是列名,请启用设置 enable_positional_arguments

示例

示例表:

查询:

SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id 查询将返回相同的结果。

以下查询返回每对 domain, device_type 的前 5 个引荐来源,总计最多 100 行(LIMIT n BY + LIMIT)。