![]() |
1
7
如果你想要军衔,就做些类似的事
或者如果您真的想要行号,请使用
当你在某个地方有相同的值时,它们会有所不同。如果需要的话,还有密集的_rank()。 当然,这需要PostgreSQL 8.4。 |
![]() |
2
5
不是只有这样吗:
或者我错过了什么? 更新: 如果要显示排名,请使用以下命令:
|
![]() |
3
3
编辑:既然你要求
|
![]() |
4
1
以前的回答处理的问题是“选择所有行并获得它们的排名”,这不是您想要的…
只做: 从表中选择count(*),其中score>$1 其中$1是您刚刚选择的行的分数(我想您希望显示它,以便选择它…)。 或做: 选择A ,(选择计数( )从表B中得分>b.score)从表中排名为a,其中pk=… 但是,如果选择排在最后的一行,则需要对排在它前面的所有行进行计数,因此需要扫描整个表,而且速度非常慢。 解决方案: 选择Count(*)From(从分数限制为30的表中选择1) 你会得到30个最佳分数的精确排名,而且会很快。 谁在乎失败者? 好吧,如果你真的关心失败者,你需要做一个柱状图: 假设得分可以从0到100,您有100万失败者得分为80分,10名优胜者得分为80分。 你做了一个有多少行X的柱状图,这是一个简单的100行小表。向主表添加触发器以更新柱状图。 如果你想给一个得分为x的失败者排名,他的排名是sum(his to),其中his to得分为x。 因为你的分数可能不在0到100之间,但(比如)在0到1000000000之间,你需要稍微修改一下,比如放大你的柱状图箱。所以您最多只需要100个箱子,或者使用一些日志柱状图分布函数。 正如Postgres在分析表时所做的那样,如果您在得分上将统计目标设置为100或1000,则分析,然后运行: 解释从分数为1美元的表中选择*。 你会得到一个不错的行数估计。 谁需要确切的答案? |
|
tggtsed · PostgreSQL从平均值中排除值 1 年前 |
![]() |
Dawid · 为什么我不能在子查询中使用表别名? 2 年前 |
![]() |
CraZyCoDer · 在PostgreSQL中锁定潜在事务 2 年前 |
![]() |
ranebec · 计数时如何返回0而不是null? 2 年前 |
![]() |
Flo · 分组依据中的SQL大小写 2 年前 |