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)
上,这应该有非常好的性能。你能给出列名吗?因为为了实现标记,你必须进行连接,你能给出列名吗?因为为了实现标记,你必须进行连接