MySql8.0窗口函数

本文详细介绍了MySQL8.0引入的窗口函数,包括基本概念、语法、各种类型的窗口函数如序号函数、分布函数、前后函数、头尾函数等,并通过实例展示了它们的应用,如计算排名、分布比例、前后值以及如何结合聚合函数使用。
摘要由CSDN通过智能技术生成

一、基本概念

MySQL从8.0开始支持窗口函数,这个功能在大多商业数据库和部分开源数据库中早已支持,有的也叫分析函数。

概念:

窗口的概念可以理解为记录集合;窗口函数也就是在满足某种条件的记录集合上执行的特殊函数,对于每条记录都要在此窗口内执行函数,有的函数随着记录不同,窗口大小都是固定的,这种是静态窗口;有的函数则是不同的记录对应着不同的窗口,这种动态变化的窗口叫滑动窗口。

窗口函数与聚合函数:
  1. 聚合函数是将多条记录聚合为一条;
  2. 窗口函数是每条记录都会执行,有几条记录执行完还是几条;
  3. 聚合函数也可以用于窗口函数。

二、基本格式

基本语法:<窗口函数> over (子句)
  • <窗口函数>的位置可以放专用窗口函数(rank(),percent_rank(),dense_rank()等),或者放聚合函数(sum(),avg(),max()等)。

  • 窗口函数是对where或group by子句处理后的结果进行操作,故其原则上只写于SELECT子句中。

  • over 用来指定函数执行的窗口范围,若子句为空,则意味着窗口包含满足WHERE条件的所有行,窗口函数基于所有行进行计算。

  • 若子句非空,则支持以下4中语法来设置窗口:

    window_name:给窗口指定一个别名,如果SQL中涉及的窗口较多,采用别名可以看起来更清晰易读。

    SELECT
    	`姓名`,
    	`班级`,
    	`人气`,
    	rank() over w1 AS rak
    FROM
    	`民工漫班级` window w1 AS ( PARTITION BY `班级` ORDER BY `人气` DESC );
    

    ​ 结果:
        在这里插入图片描述

    partition子句:窗口按照那些字段进行分组,窗口函数在不同的分组上分别执行。

    order by子句:按照哪些字段进行排序,窗口函数将按照排序后的记录顺序进行编号。

    ​ frame子句:frame是当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用。(本文暂不介绍)

    ​ 用于操作示例新建的民工

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值