假设我的基于sqlite3的应用程序有一个排行榜。所有的用户都有一个级别,有成千上万的用户。如果我想获得排行榜,我会查询限制为10的用户,并按降级排序。现在它起作用了。但是,如果我想在排行榜上有第11个用户,但它不是第11个最大级别的人怎么办。它是执行检查排行榜的用户。我希望他们的方法是拉出排行榜,看到排名前10的用户,但看到自己在第11位,他们是什么位置。这就是我不知道该怎么做的。我如何在不查询整个数据库的情况下,获得该用户相对于其他所有人的位置。我的应用程序有将近100k行的用户,如果选择整个数据库的效率太低的话。
下面是我希望它看起来是什么样子的一个例子(为了简单起见,将排行榜设为5长而不是10长)
1. BobBobman123 (lvl 104)
2. Jin73 (lvl 99)
3. iefa44 (lvl 78)
4. jobSteve_8 (lvl 68)
5. david4 (lvl 61)
143. harrypotter64 (lvl 7)例如,我想要完成的事情是,能够获得harrypotter64 (检查排行榜的人)的位置。本例中的位置应该是143。
发布于 2020-03-13 05:17:45
Window functions出手相救!(需要sqlite 3.25或更高版本)。就像这样
WITH ranked AS
 (SELECT dense_rank() OVER (ORDER BY level DESC) AS position
       , username, level
  FROM leaderboard)
SELECT *
FROM ranked
WHERE position <= 10 OR username = 'harrypotter64'
ORDER BY position在leaderboard(level DESC)上建立索引以提高效率。
https://stackoverflow.com/questions/60661887
复制相似问题