gpt4 book ai didi

mysql - sql - 有没有办法使用另一个 SELECT 查询来过滤 SELECT 查询的结果?

转载 作者:行者123 更新时间:2023-11-29 04:14:59 26 4
gpt4 key购买 nike

具体来说,我想做的是按列值对表进行排名,此处称为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com