【发布时间】:2020-05-15 04:23:56
【问题描述】:
我有一张名为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;
【问题讨论】:
-
什么版本的 MySQL? MySQL 8 added
rank -
@Schwern 服务器版本:5.7.30
-
@Schwern 我编辑了答案,但出现语法错误
-
我要找什么rank位置就是DENSE_RANK。