mysql - mysql表中的排名条目

标签 mysql sorting ranking

我有一个包含很多行的 MySQL 表。该表有一个流行列。如果我按受欢迎程度排序,我可以获得每个项目的排名。是否可以在不对整个表进行排序的情况下检索特定项目的排名?我不这么认为。对吗?

另一种方法是创建一个新列来存储排名,对整个表进行排序,然后遍历所有行并更新排名。那是极其低效的。有没有办法在单个查询中执行此操作?

最佳答案

如果不先对表格进行排序或存储排名,就无法计算某事物的顺序(所谓的排名)。

但是,如果您的表已正确编入索引(流行度索引),数据库对其进行排序就很容易,因此您可以获得排名。我建议如下:

全选,包括排名

SET @rank := 0;
SELECT t.*, @rank := @rank + 1
FROM table t
ORDER BY t.popularity;

要获取具有特定“id”的项目,您可以简单地使用如下子查询:

选择一个,包括排名

SET @rank := 0;
SELECT * FROM (
  SELECT t.*, @rank := @rank + 1
  FROM table t
  ORDER BY t.popularity
) t2
WHERE t2.id = 1;

关于mysql - mysql表中的排名条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195257/

相关文章:

mysql - 如何在Mysql中查找给定年份的星期开始和结束日期

java - 坚持一对多关系时违反约束

algorithm - 链表归并排序解释

javascript - 减慢 while 循环内的 for 循环 (Javascript)

sorting - 如何在Kotlin中使用sortedWith()?

mysql - 如何优化查找相关性的极其缓慢的 MySQL 查询

MySQL 从 2 个表中选择不同值并进行计数

sql - 选择排名靠前的重叠段 SQL

javascript - 对整数数组进行排序并显示输入值

algorithm - 秩相关算法