MYSQL窗口函数(Rows & Range)——滑动窗口函数用法

这篇具有很好参考价值的文章主要介绍了MYSQL窗口函数(Rows & Range)——滑动窗口函数用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

语法介绍

窗口函数语法:

<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>
rows/range子句<用于定义窗口大小> )

<窗口函数>可以放以下两种函数:
1) 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。
2) 聚合函数,如sum. avg, count, max, min等

1)专用窗口函数

rank, dense_rank, row_number这三个函数的区别在这篇文章里有详细介绍,简略说就是:

  • Rank:有相同名次,名次按实际个数走,会跳数字。
  • Dense_rank: 有相同名次,名次不跳数
  • Row_number:相同分数按行数排序
分数 Rank Dense_Rank Row_number
100 1 1 1
100 1 1 2
90 3 2 3

2)聚合函数

这里以sum()为例子,使用常用的部门员工数据集,介绍聚合函数的不同组合用法

例1: 求各个部门的薪酬总数:

mysql滑动窗口函数,Mysql,mysql,数据库

3) 滑动窗口:rows&range用法

[<ROWS or RANGE clause> BETWEEN <Start expr> AND <End expr>]
  • ROWS: 表示按照行的范围进行定义框架,根据order by子句排序后,取的前N行及后N行的数据计算(与当前行的值无关,只与排序后的行号相关)。常用:rows n perceding表示从当前行到前n行(一共n+1行)
  • RANGE:表示按照值的范围进行定义框架,根据order by子句排序后,指定当前行对应值的范围取值,行数不固定,只要行值在范围内,对应行都包含在内。适用于对日期、时间、数值排序分组
边界可取值(Start expr & End expr) 说明
Current Row 当前行
N preceding 前 n 行,n 为数字, 比如 2 Preceding 表示前2行
unbounded preceding 开头
N following 后N行,n 为数字, 比如 2 following 表示后2行
unbounded following 结尾
range取特定日期区间 说明
range interval 7-1 day preceding 最近7天的值
range between interval 1 day preceding and interval 1 day following 前后一天和当天的值

列2:求按id号累计员工的薪资(rows 用法)

mysql滑动窗口函数,Mysql,mysql,数据库
注:如果将这里的rows 换成range 结果是一样的,因为这里使用id号排序,id和行号一致。


例3:求每个员工的薪资情况以及对应±1万元及±5千元薪资范围内的人数 (Range用法)

mysql滑动窗口函数,Mysql,mysql,数据库
Range 是根据值来组合排序的,结果中的第一行 Same的工资是60000, 而薪资范围内在50000-70000的人一共有4个,薪资范围内在55000-65000的人只有一个。


参考问题连接

累计问题: 牛客网 SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量
限制条件下的累计问题: 牛客网SQL160 国庆期间每类视频点赞量和转发量
The RANGE Clause in SQL Window Functions: 5 Practical Examples文章来源地址https://www.toymoban.com/news/detail-692846.html

到了这里,关于MYSQL窗口函数(Rows & Range)——滑动窗口函数用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL8窗口函数

    一、窗口函数简介 在日常开发工作中,经常会遇到下面这些需求 去医院看病,怎样知道上次就医距现在的时间? 环比如何计算? 怎么样得到各部门工资排名前N名员工列表? 查找各部门每人工资占部门总工资的百分比? 如果用传统SQL来解决这些问题,理论上是可以的,但逻

    2024年02月11日
    浏览(49)
  • 【MySQL】MySQL版本8+ 窗口函数 Lead 的两种使用

    1709. 访问日期之间最大的空档期 表:UserVisits Column Name Type user_id int visit_date date 该表没有主键,它可能有重复的行 该表包含用户访问某特定零售商的日期日志。 假设今天的日期是 ‘2021-1-1’ 。 编写解决方案,对于每个 user_id ,求出每次访问及其下一个访问(若该次访问是最

    2024年01月22日
    浏览(43)
  • 【SQL】MySQL中的窗口函数(开窗函数)

    窗口函数是 MYSQL8.0 新增的 聚合函数: 多行变一行,常见的sum,count,max,min 窗口函数: 行数不变,常见的row_number,rank 语法格式: 窗口函数(表达式) over (partition by … order by … frame_clause) partition by是分区,类似于group by,如去掉相当于对所有数据进行计算 order by排序 frame_c

    2024年02月07日
    浏览(50)
  • 深入MySQL窗口函数:原理和应用

    在现代数据库管理系统中,窗口函数(Window Functions)已经成为处理复杂数据分析任务的关键工具。MySQL从8.0版本开始引入了对窗口函数的支持,这极大地增强了其在数据分析和报表生成方面的能力。本文将深入探讨MySQL窗口函数的原理、应用场景以及优化策略。 窗口函数(

    2024年01月23日
    浏览(41)
  • MySQL8新特性:窗口函数(精讲)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主! 也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 假设我现在有这样一个数据表,它显示了某购物网站在每个城市每个区的销售额: 查询: 需求:

    2024年02月13日
    浏览(66)
  • mysql日期函数用法大全

    一、 返回当前日期 1、CURRENT_DATE()、CURRENT_DATE和CURDATE()用法相同:返回当前日期 2、CURRENT_TIME()、CURRENT_TIME和CURTIME()用法相同:返回当前时间 3、CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP、LOCALTIMESTAMP()、LOCALTIMESTAMP、LOCALTIME()、LOCALTIME和NOW()用法相同:返回当前日期和时间 4、SYSDATE():返回

    2024年02月15日
    浏览(45)
  • 【MySQL】MySQL的IFNULL()、ISNULL()、NULLIF()函数用法说明

    MySQL IFNULL 函数是 MySQL 控制流函数之一。 它有两个参数,第一个参数不为 NULL 时返回。 否则,IFNULL 函数返回第二个参数。 这两个参数可以是文字值或表达式。 如果 expression1 不为 NULL,则 IFNULL 函数返回 expression1 ,否则返回 expression2 。 MySQL ISNULL() 函数用于检查表达式 是否为

    2024年02月12日
    浏览(43)
  • 【MySQL】SQL的函数用法

    数据准备 所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。 Count() 统计表中数据的行数或者统计指定列其值不为NULL的数据个数 示例 Max() 计算

    2024年02月09日
    浏览(81)
  • MySQL中的cast()函数用法

    CAST()函数,把一个字段转成另一个字段,主要转化的是字段的类型 其语法为:cast(字段名 as 转换的类型 )                 转换的类型共有: CHAR            字符型                                               DATE            日期型                            

    2024年02月11日
    浏览(45)
  • mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

    sql server 序号函数 序号函数 ROW_NUMBER() 顺序排序 RANK() 并列排序,会跳过重复的序号,比如序号为1,1,3 DENSE_RANK() 并列排序,不会跳过重复的序号,比如 序号为 1,1,2 语法结构 窗口函数的优点 使用窗口函数,只用了一步就完成了查询,而且,由于没有用到临时表,执行的

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包