MySQL row_number()函数,rank()函数和dense_rank()函数

从MySQL8.0开始引用row_number(), rank()函数和dense_rank()函数,也就是常见的窗口函数,三个函数都是一种用于计算排名的工具,它们根据指定的列对结果集进行排序,并为每一行分配一个排名值(1,2,3,...)。

函数区别点

1、row_number()函数不会跳过相同值排名,即常见顺序(1,2,3)

 适用场景:

  • 需要为每一行分配唯一的数字。
  • 不关心相同值的排名差异。

2、rank()函数会跳过相同值的排名,即使有相同的值也会分配相同的排名(1,1,3);

适用场景:

  • 需要考虑相同值的排名差异。
  • 希望在出现相同值时跳过下一级的排名。

3、dense_rank()函数不会跳过排名,即使有相同的值也会分配相同的排名(1,1,2);

适用场景:

  • 需要考虑相同值的排名差异。
  • 希望在出现相同值时不跳过下一级的排名。

函数语法

row_number()函数语法:

row_number() over (partition by expr,...[,expr_n]

                                order by expr [asc|desc],...[,expr_n]);

- partition by :可选部分,将结果集分成更小的集合,如果省略此部分,会将整个结果集视为一个分区。

- order by :必选部分,指定按照哪些列对行进行排序。

示例:为每个部门内的员工按照薪水排序

select department,employee_name,salary,
       row_number() over (partition by department order by salary) as '排名'
from employees;

rank()函数语法:

rank() over (order by column_name [asc|desc])

dense_rank函数语法:

dense_rank() over (order by column_name [asc|desc])

简单使用

假设有一个employee表,需要查询员工薪资排名

-- 使用row_number()函数
select name '姓名',salary '工资',row_number() over(order by salary desc) as '排名'
from `employees`;

-- rank()函数
select name '姓名',salary '工资',rank() over(order by salary desc) as '排名'
from `employees`;

-- dense_rank()函数
select name '姓名',salary '工资',dense_rank() over(order by salary desc) as '排名'
from `employees`;

相关推荐

  1. Python3 笔记:range() 函数

    2024-03-14 12:20:03       30 阅读
  2. pandas排名函数rank()的参数

    2024-03-14 12:20:03       22 阅读
  3. Python基础复习-range函数列表截取

    2024-03-14 12:20:03       49 阅读
  4. 【C++】简化for-range的算法函数

    2024-03-14 12:20:03       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 12:20:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 12:20:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 12:20:03       87 阅读
  4. Python语言-面向对象

    2024-03-14 12:20:03       96 阅读

热门阅读

  1. 【etcd】的限流设计

    2024-03-14 12:20:03       42 阅读
  2. 计算机视觉(CV)技术的优势和挑战

    2024-03-14 12:20:03       37 阅读
  3. vue3路由跳转时,页面如何滚动到顶部

    2024-03-14 12:20:03       42 阅读
  4. cv2.cvtColor()将二维转化为彩色图像

    2024-03-14 12:20:03       43 阅读
  5. 前端面试题 ===> 【Ajax、请求】

    2024-03-14 12:20:03       40 阅读
  6. 防抖与节流

    2024-03-14 12:20:03       39 阅读
  7. kafka 开启用户认证

    2024-03-14 12:20:03       42 阅读
  8. 策略模式(Strategy mode)

    2024-03-14 12:20:03       40 阅读
  9. leetcode-322. 零钱兑换

    2024-03-14 12:20:03       52 阅读