mysql - mySql 等级排序从到
问题描述
我有一张这样的桌子:
users
:
| username | statistics |
----------- ---------------------------------------
0 | peter200 | { "gamesWon": 4, "gamesPlayed" : 4} |
1 | eminem33 | { "gamesWon": 7, "gamesPlayed" : 20} |
注意:(统计=“JSON”)
我想创建一个排名列表。
因此,数字最高的用户statistics. gamesWon
获得排名numero uno 1
,依此类推。
到目前为止我得到的是这样的(正如我所希望的那样工作):
SELECT username, statistics, @rank := @rank + 1 AS rank
FROM users, (SELECT @rank := 0) r
WHERE JSON_EXTRACT(statistics, '$.gamesWon')
ORDER BY JSON_EXTRACT(statistics, '$.gamesWon') DESC
所以我的问题是:现在我想从上面更新查询以获取特定排名索引中的信息(假设从排名 2 到排名 10)。
添加AND rank > 2 AND rank < 10
到WHERE clause
似乎不是一个可行的解决方案。所以任何帮助将不胜感激。
解决方案
您需要用子查询包装它:
SELECT *
FROM (SELECT username, statistics, @rank := @rank + 1 AS rank
FROM users, (SELECT @rank := 0) r
WHERE JSON_EXTRACT(statistics, '$.gamesWon')
ORDER BY JSON_EXTRACT(statistics, '$.gamesWon') DESC
) s
WHERE rank > 2 AND rank < 10
推荐阅读
- c++ - 如何强制在cmake中包含标头?
- javascript - '结果未定义' 使用 js 发布到控制器
- maven - 依赖项目未从父 POM 读取属性
- python-3.x - 如何使用枕头在图像中显示文本
- azure-ad-b2c - 需要澄清 WingTipGames 中的邀请流程
- xamarin.android - 在复杂布局中查找 EditText
- cakephp - 控制器集成测试:如何测试实体上的方法调用
- xml - 为什么我不能在 Odoo 11 的电子邮件模板正文中使用 CDATA?
- c# - 微软团队应用程序可以在 UI 抑制模式下用作 Skype for business 吗?
- r - 为每个循环迭代设置时间限制