PostgreSQL中第n行用于p分位数

时间:2012-09-25 11:37:38

标签: postgresql cursor limit offset quantile

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

我的主要目标是计算一行的p分位数,因为PostgreSQL默认情况下不提供此功能,所以我必须自己编写。

干杯

2 个答案:

答案 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子句中所述。