mysql自动排序函数dense_rank() over()、rank() over()、row_number() over()用法和区别

##区别:

rank():是并列排序,会跳过重复序号

dense_rank():是并列排序,不会跳过重复序号

row_number():是顺序排序,不跳过任何一个序号,就是行号

##数据准备:

create table students(
	id int(11)  auto_increment primary key,
	name varchar(50) not null, 
	score int(4) not null
	);
 
insert into students(name,score) values
('zhangsan', 100),
('lisi', 99),
('wangwu', 100), 
('trx', 90), 
('pjf', 99), 
('wzm', 96);

##查看下插入的数据:

mysql> select * from students;
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan |   100 |
|  2 | lisi     |    99 |
|  3 | wangwu   |   100 |
|  4 | trx      |    90 |
|  5 | pjf      |    99 |
|  6 | wzm      |    96 |
+----+----------+-------+

##使用三种不同的方法进行排序:

select 
    id, 
    name, 
    rank() over(order by score desc) `rank`,
    row_number() over(order by score desc) `row_number`,
    dense_rank() over(order by score desc) `dense_rank`
from students;
 
--------------------------------- 结果 ------------------------------------
+----+----------+-------+------+------------+------------+
| id | name     | score | rank | row_number | dense_rank |
+----+----------+-------+------+------------+------------+
|  1 | zhangsan |   100 |    1 |          1 |          1 |
|  3 | wangwu   |   100 |    1 |          2 |          1 |
|  2 | lisi     |    99 |    3 |          3 |          2 |
|  5 | pjf      |    99 |    3 |          4 |          2 |
|  6 | wzm      |    96 |    5 |          5 |          3 |
|  4 | trx      |    90 |    6 |          6 |          4 |
+----+----------+-------+------+------------+------------+

##转载

https://blog.csdn.net/weixin_43161811/article/details/112001469

end