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

标签 mysql sql mariadb sql-order-by where-clause

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

相关文章:

mysql - Zabbix 3.0 MySQL 数据库我找不到数据库/mysql schema.sql

php - 如何使用 mysql 和 php 显示查询(带有子查询)的结果,其中一列可以有多个信息?

php - 如何通过mysql删除wordpress中没有特色图片的帖子?

mysql - 帮助我的 JAVA 应用程序进行 SQL 查询

sql - 需要有关 mysql 查询的帮助

mysql - MySQL 中 ha_sequence 插件的使用

python - mysqlconnector python错误: "Commands out of sync; you can' t run this command now"

php - 使用 mysql 和 count request 时出现问题

mysql - GROUPing 时,mariaDB 是否不支持 SELECT 语句中的函数依赖?

数据库结构 : Relational table with more columns or relational table to a relational table?