跳至主要内容
跳至主要内容

LIMIT 子句

LIMIT 子句控制查询结果返回的行数。

基本语法

选择前几行

LIMIT m

返回结果中的前 m 行,或者当记录数少于 m 时返回所有记录。

替代的 TOP 语法(与 MS SQL Server 兼容)

-- SELECT TOP number|percent column_name(s) FROM table_name
SELECT TOP 10 * FROM numbers(100);
SELECT TOP 0.1 * FROM numbers(100);

这等效于 LIMIT m,可用于与 Microsoft SQL Server 查询兼容。

带偏移量的选择

LIMIT m OFFSET n
-- or equivalently:
LIMIT n, m

跳过前 n 行,然后返回接下来的 m 行。

在两种形式中,nm 必须是非负整数。

负限制

使用负值从结果集的末尾选择行

语法结果
LIMIT -m最后 m
LIMIT -m OFFSET -n跳过最后 n 行后的最后 m
LIMIT m OFFSET -n跳过最后 n 行后的前 m
LIMIT -m OFFSET n跳过前 n 行后的最后 m

LIMIT -n, -m 语法等效于 LIMIT -m OFFSET -n

分数限制

使用 0 到 1 之间的十进制值选择行百分比

语法结果
LIMIT 0.1前 10% 的行
LIMIT 1 OFFSET 0.5中位数行
LIMIT 0.25 OFFSET 0.5第三四分位数(跳过前 50% 的行后的 25% 的行)
注意
  • 分数必须是大于 0 且小于 1 的 Float64 值。
  • 分数行数将四舍五入到下一个整数。

组合限制类型

您可以将标准整数与分数或负偏移量混合使用

LIMIT 10 OFFSET 0.5    -- 10 rows starting from the halfway point
LIMIT 10 OFFSET -20    -- 10 rows after skipping the last 20

LIMIT ... WITH TIES

WITH TIES 修饰符包含与限制中最后一行具有相同 ORDER BY 值的其他行。

SELECT * FROM (
    SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
└───┘

使用 WITH TIES 时,将包含所有匹配最后一个值的行

SELECT * FROM (
    SELECT number % 50 AS n FROM numbers(100)
) ORDER BY n LIMIT 0, 5 WITH TIES
┌─n─┐
│ 0 │
│ 0 │
│ 1 │
│ 1 │
│ 2 │
│ 2 │
└───┘

包含第 6 行,因为它具有与第 5 行相同的值 (2)。

注意

WITH TIES 不支持负限制。

可以将此修饰符与 ORDER BY ... WITH FILL 修饰符结合使用。

注意事项

非确定性结果: 如果没有 ORDER BY 子句,则返回的行可能是任意的,并且在查询执行之间可能有所不同。

服务器端限制: 返回的行数也可能受到 limit 设置的影响。

另请参阅

  • LIMIT BY — 限制每组值的行数,对于获取每个类别的前 N 个结果很有用。
    © . This site is unofficial and not affiliated with ClickHouse, Inc.