我如何找到特定列的排名位置

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

我也想在同一条语句中选择balancemy_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)。

以上是关于我如何找到特定列的排名位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段列表中找到特定片段?

如何获取 MySQL 列的位置?

如何在文本区域标签中的特定光标位置插入选择标签下拉值作为文本片段?

在iOS中,如何找到特定按钮所在代码的位置?

如何找到Pricepoint的最低排名

如何在片段着色器中找到 4 个顶点之间的插值位置?