OFFSET FETCH 子句
OFFSET 和 FETCH 允许按分段方式检索数据。它们用于指定在单个查询中要获取的行块。
offset_row_count 或 fetch_row_count 的值可以是一个数字或字面常量。可以省略 fetch_row_count;默认值为 1。
OFFSET 指定在开始返回查询结果集中的行之前要跳过的行数。OFFSET n 会跳过结果中的前 n 行。
支持负值 OFFSET:OFFSET -n 会跳过结果中的最后 n 行。
也支持小数形式的 OFFSET:OFFSET n —— 如果 0 < n < 1,则会跳过结果前 n * 100% 的行。
示例:
• OFFSET 0.1 —— 跳过结果的前 10%。
注意 • 该小数必须是一个大于 0 且小于 1 的 Float64 类型数值。 • 如果计算得到的行数为小数,则会向上取整到下一个整数。
FETCH 指定查询结果中最多可以包含的行数。
ONLY 选项用于返回紧跟在 OFFSET 所跳过的行之后的那些行。在这种情况下,FETCH 是 LIMIT 子句的替代方案。例如,以下查询
与此查询完全相同
WITH TIES 选项用于根据 ORDER BY 子句,在结果集中返回与最后一行并列的所有额外行。例如,如果 fetch_row_count 设置为 5,但又有两行的 ORDER BY 列值与第五行相同,那么结果集中将包含 7 行。
:::note
根据标准,如果同时存在,OFFSET 子句必须位于 FETCH 子句之前。
:::
:::note
实际偏移量也可能取决于 offset 设置。
:::
示例
输入表:
ONLY 选项的用法:
结果:
WITH TIES 选项的使用方式:
结果: