1

我正在尝试获取查询结果的第 n 行。其他帖子建议使用OFFSETLIMIT但禁止使用变量(ERROR: argument of OFFSET must not contain variables)。此外,我阅读了游标的用法,但即使在阅读了他们的 PostgreSQL 手册页之后,我也不太确定如何使用它们。关于如何使用游标的任何其他建议或示例?

我的主要目标是计算一行的 p 分位数,由于 PostgreSQL 默认不提供此功能,我必须自己编写它。

干杯

4

2 回答 2

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() - 这也可能对您有用。

于 2012-09-25T11:56:14.813 回答
0

如果您想获得第 10 条记录,下面的查询也可以正常工作。

 select * from table_name order by sort_column limit 1 offset 9

OFFSET 只是在开始返回行之前跳过那么多行,如 LIMIT 子句中所述。

于 2012-09-25T12:08:11.813 回答