- 类别:
LIMIT / FETCH¶
约束语句或子查询返回的最大行数。LIMIT(PostgreSQL 语法)和 FETCH(ANSI 语法)均受支持,并产生相同的结果。
- 另请参阅:
语法¶
PostgreSQL 语法¶
ANSI 语法¶
参数¶
count返回的行数。必须是非负整数常量。
也接受值 NULL、空字符串 (
'') 和$$$$并将其视为“无限制”;如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。OFFSETstart在此之后返回受限/提取的行的行编号。必须是非负整数常量。
如果
OFFSET省略,则输出从结果集中的第一行开始。也接受值 NULL、空字符串 (
'') 和$$$$并将其视为 0(即不跳过任何行);如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。ONLY此可选关键字不会影响输出。它只是用于向人类读者强调。
使用说明¶
ORDER BY 子句并非必需;但如果没有 ORDER BY 子句,结果是不确定的,因为查询结果不一定按任何特定顺序排列。要控制返回的结果,请使用 ORDER BY 子句。
子查询中的 ORDER BY 子句仅保证该子查询内的排序。外部查询级别中不保留顺序。当 LIMIT 子句依赖于来自不同的嵌套级别 ORDER BY 子句,优化器可能不会按预期应用 LIMIT 子句,并且返回的行数可能与 LIMIT 值不同。同一子查询的 COUNT(*) 查询也可能报告与实际返回的行数不同的行数。
例如,在以下查询中,最内层子查询对结果进行排序,中间子查询将输出限制为 6 行,外部查询将输出限制为 100 行。您可能期望六行,因为内部 LIMIT 子句较小,但由于 ORDER BY 子句位于与 LIMIT 子句不同的子查询中,结果不可预测,查询可能返回多于或少于六行:
为避免出现不可预测的结果,请保留位于同一查询级别的 ORDER BY 子句和 LIMIT(或 FETCH)子句:
Top-K 修剪可以提高同时包含 LIMIT 和 ORDER BY 子句的查询的性能。有关更多信息,请参阅 用于提高查询性能的 Top-K 修剪。
TOP
n和 LIMITcount是等效的。LIMIT 子句和 SAMPLE 子句都会返回表中行的子集。使用 LIMIT 子句时,Snowflake 会以尽可能最快的方式返回指定行数。使用 SAMPLE 子句时,Snowflake 会根据子句中指定的采样方法返回行。
示例¶
以下示例演示了 LIMIT 的效果。为了简单起见,这些查询省略了 ORDER BY 子句,并假设输出顺序始终与第一个查询所示的顺序相同。** 实际查询应该包含 ORDER BY。**
下面的示例演示如何使用 NULLs 来指示:
行数没有限制。
从第一行开始(不要跳过任何行)。