【问题标题】:Postgres: Find position of a specific row within a resultset?Postgres:在结果集中查找特定行的位置?
【发布时间】: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

【问题讨论】:

    标签: sql database postgresql pagination


    【解决方案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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2022-06-15
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多