我正在尝试获取查询结果的第n行。其他帖子建议使用OFFSET
或LIMIT
,但这些帖子禁止使用变量(ERROR: argument of OFFSET must not contain variables
)。我进一步阅读了游标的用法,但即使在阅读了PostgreSQL手册之后,我也不太确定如何使用它们。关于如何使用游标的任何其他建议或示例?
我的主要目标是计算一行的p分位数,因为PostgreSQL默认情况下不提供此功能,所以我必须自己编写。
干杯
答案 0 :(得分:1)
以下内容返回结果集的第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() - 这对您也很有用。
答案 1 :(得分:0)
如果你想获得第10条记录,下面的查询也可以正常工作。
select * from table_name order by sort_column limit 1 offset 9
OFFSET只是在开始返回行之前跳过那么多行,如LIMIT子句中所述。