作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
具体来说,我想做的是按列值对表进行排名,此处称为 power
,然后获取排名表并查找特定行,在本例中为用户.就像在视频游戏排行榜中查找特定用户的排名一样。
基本上,我想在已排序的表中找到特定的行。我知道如何同时做这两件事。
我想我想做的是结合这些陈述:
排序:
SELECT * FROM users ORDER BY power DESC;
过滤:
SELECT * FROM otherQueryResult WHERE discordID = discordIDInput;
然后找出返回行的行号。
实际上,我想要一个看起来像这样的结果:
+-----------+------+
| discordID | rank |
+-----------+------+
| 123456789 | 52 |
+-----------+------+
我 14 岁,对 SQL 的了解仍然非常有限 - 所以我现在更喜欢更简单的解决方案,而不是原始性能或可用性,但是我们非常感谢任何帮助。
在此先感谢您的帮助。
最佳答案
您似乎在寻找诸如 RANK()
之类的窗口函数:
SELECT *
FROM (SELECT u.*, RANK() OVER(ORDER BY power DESC) rnk FROM users u) x
WHERE discordID = ?
内部查询为每个用户分配一个排名,具有最高power
的用户排名第一。然后,外部查询过滤具有相关 discordID
的用户。
还有其他窗口函数可以响应您的用例:
ROW_NUMBER()
:为每条记录分配一个排名;偶数记录处理不一致
RANK()
:偶数记录获得相同的排名;如果两个用户的排名为 1,则以下用户的排名为 3
DENSE_RANK()
:与 RANK()
相同,但不会在排名中产生差距
关于mysql - sql - 有没有办法使用另一个 SELECT 查询来过滤 SELECT 查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964727/
我是一名优秀的程序员,十分优秀!