我如何找到特定列的排名位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何找到特定列的排名位置相关的知识,希望对你有一定的参考价值。
我有一个称为bank
的表。我想查找特定customer_number
的排名位置。例如,my_id = 5
的排名位置是1
,因为他是最富有的人。则my_id = 4
为等级2
my_id | balance | customer_number
----------------|------------------
1 | 5 | 345345345
2 | 1 | 435456
3 | 45 | 345345
4 | 81 | 43543535
5 | 95 | 4566876
6 | 45 | 324624121
my_id = 6
的排名为3
。并且my_id = 3
也将具有3
的等级,因为它们是重复的。然后,将4
的等级赋予my_id = 1
。
我也想在同一条语句中选择balance
和my_id
,但我似乎也没有选择。
我想要一种非常快速有效的方法来做到这一点。
select count(*) + 1, balance, my_id
from bank b
where b.balance > (select balance from bank where customer_number = 43543535);
select bank.*
from (select bank.*, rank() over (order by balance desc) as rnk
from bank
) bank
where customer_number = 554113153538064391;
答案
使用用户定义的变量:
SELECT @rank := @rank + (@prev != balance) `rank`,
my_id,
@prev := balance balance,
customer_number
FROM bank, (SELECT @rank:=0, @prev:=0) variables
ORDER BY balance DESC;
即使从理论上讲,分配给启动子查询中@prev
的值也必须不等于最小平衡,但不能为NULL(例如,可以使用MAXINT)。
以上是关于我如何找到特定列的排名位置的主要内容,如果未能解决你的问题,请参考以下文章