【发布时间】:2012-04-22 04:31:01
【问题描述】:
我正在尝试对表中的数据子集进行排名,但我认为我做错了什么。我找不到有关 postgres 的 rank() 功能的太多信息,也许我找错了地方。无论哪种方式:
我想知道某个 id 在基于日期的表集群中的排名。我的查询如下:
select cluster_id,feed_id,pub_date,rank
from (select feed_id,pub_date,cluster_id,rank()
over (order by pub_date asc) from url_info)
as bar where cluster_id = 9876 and feed_id = 1234;
我在以下 stackoverflow 帖子之后对此进行建模:postgres rank
我认为我做错了什么的原因是 url_info 中只有 39 行位于 cluster_id 9876 中,并且此查询运行了 10 分钟并且再也没有回来。 (实际上重新运行了很长一段时间,它没有返回任何结果,但是在集群 9876 中有一行 id 1234)我期待这会告诉我“id 1234 在给定的标准中排名第五)。它会根据我的查询约束返回一个相对排名,对吗?
这是 postgres 8.4 顺便说一句。
【问题讨论】:
-
你想要排名相对于什么?所有记录(这是您上面的查询所要求的,可能是为什么需要太长时间)?谓词选择的记录集?其他一些分组?如果您不想对所有行进行排名,
over子句应指定partition by。 Here's the tutorial on window functions -
我想相对于 pub_date 进行排名。也许我可以解释得更好一点: url_info 里面有数千个 url。其中 39 个组成集群 9876。通过仅选择属于 9876 的 url(url 只能是一个集群的成员),我想根据 pub_date 按顺序对 url(组成集群 9876)进行排名。我仍然为此使用基于窗口函数的分区吗?我查看了您发送的 URL,看起来这是指在我计算一些值之后对项目进行排名,我在这里没有这样做....
标签: postgresql