三个函数均MySQL 8.x 以上版本,8.x以下版本会报语法错误,属于正常现象。

  MySQL 8.x 实际上就是 MySQL 5.8x,大概是为了通过更大版本型号数字,证明自己比友商先进吧。

  MYSql版本下载:https://downloads.mysql.com/archives/installer/

区别:

  • 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);

查看下插入的数据:

select * from students;

MySQL 8.0版本  自动排序函数dense_rank() over()、rank() over()、row_num() over()用法和区别

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

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

相关文章:

  • 2021-09-24
  • 2021-10-31
  • 2022-12-23
  • 2021-07-28
  • 2022-12-23
  • 2021-06-08
  • 2021-11-27
  • 2022-12-23
猜你喜欢
  • 2021-04-08
  • 2021-04-21
  • 2021-12-30
  • 2021-08-14
  • 2021-10-03
相关资源
相似解决方案