我正在尝试获取查询结果的第 n 行。其他帖子建议使用OFFSET
或LIMIT
但禁止使用变量(ERROR: argument of OFFSET must not contain variables
)。此外,我阅读了游标的用法,但即使在阅读了他们的 PostgreSQL 手册页之后,我也不太确定如何使用它们。关于如何使用游标的任何其他建议或示例?
我的主要目标是计算一行的 p 分位数,由于 PostgreSQL 默认不提供此功能,我必须自己编写它。
干杯
我正在尝试获取查询结果的第 n 行。其他帖子建议使用OFFSET
或LIMIT
但禁止使用变量(ERROR: argument of OFFSET must not contain variables
)。此外,我阅读了游标的用法,但即使在阅读了他们的 PostgreSQL 手册页之后,我也不太确定如何使用它们。关于如何使用游标的任何其他建议或示例?
我的主要目标是计算一行的 p 分位数,由于 PostgreSQL 默认不提供此功能,我必须自己编写它。
干杯
以下返回结果集的第 5 行:
select *
from (
select <column_list>,
row_number() over (order by some_sort_column) as rn
) t
where rn = 5;
您必须包含一个order by
,否则“第 5 行”的概念没有意义。
您提到“使用变量”,所以我不确定您实际上想要达到什么目标。但是您应该能够将该值5
作为此查询(甚至是子选择)的变量提供。
您可能还想进一步研究窗口函数。因为有了它,您可以例如对当前行(或类似结构)之前的 3 行执行 sum() - 这也可能对您有用。
如果您想获得第 10 条记录,下面的查询也可以正常工作。
select * from table_name order by sort_column limit 1 offset 9
OFFSET 只是在开始返回行之前跳过那么多行,如 LIMIT 子句中所述。