Mysql 中没有像 Oracle 中那样的 Rank 函数来实现查询的排名排序,但是我们可以用一
些基础查询语句来实现同样的效果。
先创建一个表来作为例子
1 | drop table if exists `post`; |
我们想要对 pv 字段进行倒序排名
1 | select @rank := @rank +1 as rank, url, pv from `post` p, (select @rank := 0) r order by pv desc; |
如果你按照我上边的语句执行,你会得到如下的结果
1 | 1 /p/3 50 |
有结果来看,我们已经得到了想要的结果,下面我们来看看怎么实现的。
首先简单说下 Mysql 中的变量,需要以 @
开头,及 @rank
,想要给变量赋值分两种。
SET 语句
1 | set @name = 'wxnacy'; |
SELECT 语句
1 | select @name := 'wxnacy'; |
两者的区别在于 set 命令需要两条命令查询,select 命令中使用 :=
赋值
而 @rank := @rank + 1
就是在查询语句中达到自增的目的,也就变相的实现了 rank
函数。
