Mysql sql—是否有方法使用另一个SELECT查询过滤SELECT查询的结果?

Mysql sql—是否有方法使用另一个SELECT查询过滤SELECT查询的结果?,mysql,sql,mariadb,sql-order-by,where-clause,Mysql,Sql,Mariadb,Sql Order By,Where Clause,具体地说,我要做的是根据一个列值对一个表进行排序,这里称为power,然后获取该排序表并查找一个特定的行,或者本例中的用户。就像在视频游戏排行榜中查找特定用户的排名一样 基本上,我希望在已排序的表中查找特定的行。我知道如何两者兼顾,但不能同时兼顾 我想我要做的是把这些陈述结合起来: 分类: SELECT * FROM users ORDER BY power DESC; 筛选: SELECT * FROM otherQueryResult WHERE discordID = discordID

具体地说,我要做的是根据一个列值对一个表进行排序,这里称为
power
,然后获取该排序表并查找一个特定的行,或者本例中的用户。就像在视频游戏排行榜中查找特定用户的排名一样

基本上,我希望在已排序的表中查找特定的行。我知道如何两者兼顾,但不能同时兼顾

我想我要做的是把这些陈述结合起来:

分类:

SELECT * FROM users ORDER BY power DESC;
筛选:

SELECT * FROM otherQueryResult WHERE discordID = discordIDInput;
然后找出返回的行的行号

实际上,我希望得到一个类似这样的结果:

+-----------+------+
| discordID | rank |
+-----------+------+
| 123456789 |  52  |
+-----------+------+
14岁时,我的SQL知识仍然非常有限——因此,目前我更喜欢简单的解决方案,而不是原始的性能或可用性,不过我非常感谢任何帮助


提前感谢您的帮助。

您似乎正在寻找一个窗口函数,如
RANK()

内部查询为每个用户分配一个等级,其中具有最高
权限的用户排在第一位。然后,外部查询过滤具有相关
不协调的用户

还有其他窗口功能可以响应您的用例:

  • 行号()
    :为每条记录分配一个等级;甚至记录也没有得到一致的处理

  • RANK()
    :即使是记录也会获得相同的排名;如果两个用户的排名为1,则以下用户的排名为3

  • densed\u RANK()
    :与
    RANK()
    相同,但不会在列组中产生间隙


您似乎在寻找一个窗口函数,如
RANK()

内部查询为每个用户分配一个等级,其中具有最高
权限的用户排在第一位。然后,外部查询过滤具有相关
不协调的用户

还有其他窗口功能可以响应您的用例:

  • 行号()
    :为每条记录分配一个等级;甚至记录也没有得到一致的处理

  • RANK()
    :即使是记录也会获得相同的排名;如果两个用户的排名为1,则以下用户的排名为3

  • densed\u RANK()
    :与
    RANK()
    相同,但不会在列组中产生间隙


加入表格,然后排名。
选择discordd,在

(按u.userid进行分区按(您从中排序的列)DESC)作为其他查询的排名结果是q内部用户作为u.id=q.userid上的u加入表,然后进行排名。
选择discordd,在

(按u.userid进行分区按(您从中排序的列)DESC)作为来自otherqueryresult的Rank作为u.id=q.userid上的q内部连接用户作为u您可以直接进行计算

我想你想要:

select 1 + count(*)
from users u
where u.power > (select u2.power from users u2 where u2.discordID = ?);

实际上,您不需要为此目的使用窗口函数。使用
(discord,power)
(power)
上的索引,这应该具有非常好的性能。

您可以直接进行计算

我想你想要:

select 1 + count(*)
from users u
where u.power > (select u2.power from users u2 where u2.discordID = ?);

实际上,您不需要为此目的使用窗口函数。如果索引位于
(discordd,power)
(power)
上,这应该有非常好的性能。

你能给出列名吗?因为为了实现标记,你必须进行连接,你能给出列名吗?因为为了实现标记,你必须进行连接