|
|
1
7
或者,如果你真的想要行号,请使用
当你在某个地方有相等的值时,它们就会不同。如果你需要的话,还有dense_rank()。 当然,这需要PostgreSQL 8.4。 |
|
|
2
5
不就是这样吗:
还是我遗漏了什么?
|
|
|
3
3
编辑:既然你要求
|
|
|
4
1
之前的回复解决了“选择所有行并获得其排名”的问题,这不是你想要的。.. 只要做: 从表中选择计数(*)WHERE分数>1.
选择a。 ,(选择计数( )表b中的WHERE分数>b.score)作为排名表作为WHERE pk=。.. 但是,如果您选择排名最后的行,是的,您需要计算排名在它之前的所有行,因此您需要扫描整个表,这将非常缓慢。
谁在乎失败者? 好吧,如果你真的关心失败者,你需要做一个直方图:
你制作一个有多少行得分为X的直方图,这是一个有100行的简单小表。在主表中添加触发器以更新直方图。 现在,如果你想对得分为X的失败者进行排名,他的排名是sum(histo),其中histo_core>十、 由于你的分数可能不在0到100之间,而是(比如)在0到1000000000之间,你需要稍微调整一下,比如放大你的直方图。所以你最多只需要100个箱子,或者使用一些对数直方图分布函数。
解释从表中选择*,其中分数>1. 你会得到一个不错的人数估计。
|