Postgres:在结果集中查找特定行的位置?

Posted

技术标签:

【中文标题】Postgres:在结果集中查找特定行的位置?【英文标题】:Postgres: Find position of a specific row within a resultset? 【发布时间】:2011-04-08 08:40:11 【问题描述】:

我试图弄清楚如何获取查询中单个项目相对于从查询返回的所有项目的相对位置。

例如,得到答案的常用方法是:

single_item = SELECT * FROM table WHERE id=65
result = SELECT * FROM table WHERE published_date < date_value
x=1
foreach(result as item):
    if(item.id == single_item.id):
        required_value = x
    endif
    x++
endforeach

有没有一种简单的方法可以通过单个 postgres 查询获取required_value

【问题讨论】:

【参考方案1】:

使用analytic/ranking/windowing functionality - 8.4 documentation link:

WITH summary AS (
   SELECT t.*,
          ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
     FROM TABLE t)
SELECT s.*
  FROM summary s
 WHERE s.id = 65

不使用WITH 语法的替代方案:

SELECT s.*
  FROM (SELECT t.*,
               ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
          FROM TABLE t) s
 WHERE s.id = 65

position 列将是一个整数值,表示 id 值为 65 的记录位置,基于 published_date 列升序排列。如果您希望在有平局时重复位置值,请将ROW_NUMBER()替换为RANK()

【讨论】:

以上是关于Postgres:在结果集中查找特定行的位置?的主要内容,如果未能解决你的问题,请参考以下文章

(Visual C#) 在RichTextBox中实现查找特定字符并返回结果的功能

对 ExecuteNonQuery 的 Postgres 函数(通过 npgsql)调用返回 -1 作为受影响行的结果

游标的作用是啥?

PHP mysql_num_rows() 函数 返回结果集中行的数目。

使用 mysql 从结果集中获取最后 4 行的最佳方法

游标的使用