当前位置:网站首页 > 技术博客 > 正文

开窗函数 mysql




微信搜索“coder-home”或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我
在这里插入图片描述


在SQL中我们经常遇到一种需求:分组排序,分组求和等各种需求。像这样的需求,如果在Oracle、SQLserver、postgresql等数据库中很容易实现,一个开窗函数就可以解决。

但是在MySQL8.0版本之前,是没有这样的开窗函数的。好在8.0之后的版本已经内置了开窗函数。不必自己写实现逻辑了。但是我们目前还有很多人在使用5.7版本。那么在5.7版本中,如何实现开窗函数的功能呢?

准备建表语句

 

初始化数据

 

最后的环境如下:
在这里插入图片描述

需求描述:获取每一个部门薪水最高的员工的信息。

需求分析:

  1. 按照部门分组,每一部门的员工放在一组,然后基于这个组中的数据,按照工资降序排列。
  2. 然后再根据排序后的结果集,获取排序为1的数据行即为结果。
  • 步骤1的SQL如下:

    定义两个变量,用于存储每一个组中的排序结果。用于存储判断数据行是否是同一组。同事给他们分别初始化数据。然后再查询的字段当中,先判断一下当前是否和上一行的部门编号是同一个部门编号。如果是同一个部门编号,则将排序结果字段加1;如果不是同个部门编号,表示要切换为新的组了,这个时候,把排序结果字段重置为1。

     
  • 步骤1的示例结果如下:

在这里插入图片描述

  • 步骤2的SQL语句如下:

    在步骤1的SQL基础之上,在外出包裹一层查询,然后时候用where条件获取上面内层查询结果中排序为1的数据行。

     
  • 步骤2的示例结果如下:
    在这里插入图片描述

需求描述:累计统计每一个部门下所有员工的工资之和。

分析:按照部门分组,每一部门的员工放在一组,然后基于这个组中的数据,逐行累加该部门下所有员工的工资。

  • SQL如下:

    定义一个用于存储最后每组员工工资之和的变量,然后再每一行数据是否为同一组数据,如果是同一组数据,则将这行数据的工资,累加到工资之和的变量中;如果不是同一组数据,把当前行的工资赋值给每组工资之和的变量。

     
  • 最后示例结果如下:

在这里插入图片描述

需求描述:计算每个员工和部门中工资最高员工的工资差。

需求分析:

  1. 根据员工的部门分组,然后判断得到每组数据中,工资最高的员工的工资。把这个作为一个新列查询出出来。
  2. 基于步骤1的结果集中的新列,和员工的工资列做减法得到差值。
  • 步骤1SQL语句如下:
     
  • 步骤1实验结果如下:

在这里插入图片描述

  • 步骤2SQL语句如下:
     
  • 步骤2实验结果如下:

在这里插入图片描述

以上就是MySQL5.7版本中,如何使用开窗函数的示例。希望能这篇文章能够帮到你,也还原你把文章分享给更多的朋友。如果有什么问题请留言,我看到后会第一时间回复你。


微信搜索“coder-home”或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我
在这里插入图片描述


版权声明


相关文章:

  • 匈牙利命名法和驼峰命名法好处2025-01-25 15:01:03
  • 位图索引和普通索引2025-01-25 15:01:03
  • python链接mongo2025-01-25 15:01:03
  • 接口自动化测试的步骤2025-01-25 15:01:03
  • 内存的trfc2025-01-25 15:01:03
  • python字典键值对的值可以重复吗2025-01-25 15:01:03
  • java 公私钥加密和解密2025-01-25 15:01:03
  • yaml文件编写接口规范2025-01-25 15:01:03
  • python 游戏编程2025-01-25 15:01:03
  • 转换同义句2025-01-25 15:01:03