mysql5.7不使用@row_num获取排名的方法
时间: 2024-05-16 10:15:14 浏览: 83
MySQL实现排名
5星 · 资源好评率100%
在 MySQL 5.7 中,可以使用子查询和变量来模拟行号(row number)。
例如,以下查询可以返回 `score` 字段按降序排列的排名:
```
SELECT
t1.id,
t1.score,
@rank := @rank + 1 AS rank
FROM
scores AS t1,
(SELECT @rank := 0) AS t2
ORDER BY
t1.score DESC;
```
解释一下上面的查询:
1. `scores` 是表名,`id` 和 `score` 是该表的两个字段。
2. `(SELECT @rank := 0)` 创建一个名为 `t2` 的虚拟表,并初始化 `@rank` 变量为 0。
3. `@rank := @rank + 1` 计算当前行的排名,并将其保存到变量 `@rank` 中。
4. `ORDER BY t1.score DESC` 按 `score` 字段降序排列。
这样,查询结果中的 `rank` 字段就是每行的排名。
阅读全文