首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Sqlite3中获取有序查询中特定行的位置?

如何在Sqlite3中获取有序查询中特定行的位置?
EN

Stack Overflow用户
提问于 2020-03-13 05:07:25
回答 1查看 85关注 0票数 0

假设我的基于sqlite3的应用程序有一个排行榜。所有的用户都有一个级别,有成千上万的用户。如果我想获得排行榜,我会查询限制为10的用户,并按降级排序。现在它起作用了。但是,如果我想在排行榜上有第11个用户,但它不是第11个最大级别的人怎么办。它是执行检查排行榜的用户。我希望他们的方法是拉出排行榜,看到排名前10的用户,但看到自己在第11位,他们是什么位置。这就是我不知道该怎么做的。我如何在不查询整个数据库的情况下,获得该用户相对于其他所有人的位置。我的应用程序有将近100k行的用户,如果选择整个数据库的效率太低的话。

下面是我希望它看起来是什么样子的一个例子(为了简单起见,将排行榜设为5长而不是10长)

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-03-13 05:17:45

Window functions出手相救!(需要sqlite 3.25或更高版本)。就像这样

代码语言:javascript
运行
复制
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)上建立索引以提高效率。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60661887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档