在PostgreSQL 8.3中实现总订单排序

在PostgreSQL 8.3中实现总订单排序,sql,postgresql,rank,postgresql-8.3,Sql,Postgresql,Rank,Postgresql 8.3,8.3的问题是…..等级在8.4中介绍 考虑数字[10,6,6,2] 我希望实现这些数字的排名,其中排名等于行号 Rank,score 1, 10 2,6 3,6 4,2 等级、分数 1, 10 2,6 3,6 4,2 部分解决方案是自联接并计算得分更高或相等的项目 这就产生了 1,10 3,6 3,6 4,2 1,10 3,6 3,6 4,2 这不是我想要的 有没有一种方法可以进行排名,甚至只是按分数排序,然后以某种方式提取行号?您是否有此表的主键 只需自行加入并计算项目:分数更高或相等和PK

8.3的问题是…..等级在8.4中介绍

考虑数字[10,6,6,2]

我希望实现这些数字的排名,其中排名等于行号

Rank,score 1, 10 2,6 3,6 4,2 等级、分数 1, 10 2,6 3,6 4,2 部分解决方案是自联接并计算得分更高或相等的项目

这就产生了

1,10 3,6 3,6 4,2 1,10 3,6 3,6 4,2 这不是我想要的


有没有一种方法可以进行排名,甚至只是按分数排序,然后以某种方式提取行号?

您是否有此表的主键

只需自行加入并计算项目:分数更高或相等和PK更高

PK比较会打破僵局,给你想要的结果


升级到9.1后,使用
行编号()

是否有此表的PK

只需自行加入并计算项目:分数更高或相等和PK更高

PK比较会打破僵局,给你想要的结果


升级到9.1后,使用
行编号()

有一种方法使用一个数组,该数组可与第8.3页一起使用。就性能而言,它可能不是非常高效,但如果没有太多的价值,它也可以

其思想是对临时数组中的值进行排序,然后提取数组的边界,然后使用
generate_series
将其连接起来,逐个提取值,数组中的索引就是行号

假设表为
分数(value int)
,则示例查询:


有一种方法使用了一个数组,可以与PG 8.3一起使用。就性能而言,它可能不是非常高效,但如果没有太多的价值,它也可以

其思想是对临时数组中的值进行排序,然后提取数组的边界,然后使用
generate_series
将其连接起来,逐个提取值,数组中的索引就是行号

假设表为
分数(value int)
,则示例查询:


如果您想要一个相当于的行号,可以在8.3版中使用(临时):


调用
nextval()

请注意,序列(与任何临时对象一样)

  • 仅在创建它的同一会话中可见
  • 隐藏同名的任何其他表对象
  • 在会话结束时自动删除
要在同一会话中使用序列,请在每次查询之前重复运行:

SELECT setval('foo', 1, FALSE);

如果您想要一个相当于的行号,可以在8.3版中使用(临时):


调用
nextval()

请注意,序列(与任何临时对象一样)

  • 仅在创建它的同一会话中可见
  • 隐藏同名的任何其他表对象
  • 在会话结束时自动删除
要在同一会话中使用序列,请在每次查询之前重复运行:

SELECT setval('foo', 1, FALSE);

为什么不升级到当前版本?Postgres 8.3是生命的终结:因为,你不能只按一个按钮升级。我正在迁移到9.1的过程中,但我需要在8.3中使用它。您的问题不明确。您是否需要等效的?为什么不升级到当前版本?Postgres 8.3是生命的终结:因为,你不能只按一个按钮升级。我正在迁移到9.1的过程中,但我需要在8.3中使用它。您的问题不明确。你想要同等的吗?
SELECT setval('foo', 1, FALSE);