具体来说,我想做的是按列值对表进行排名,此处称为 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,则以下用户的排名为 3DENSE_RANK()
:与RANK()
相同,但不会在排名中产生差距
关于mysql - sql - 有没有办法使用另一个 SELECT 查询来过滤 SELECT 查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964727/