MySQL - SQL窗口函数
1.应用场景
窗口函数解决的问题包括: 1)排名问题 2)top N问题 应用工作中, 面试中. |
2.学习/操作
前言
一.窗口函数有什么用?在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:
面对这类需求,就需要使用sql的高级功能窗口函数了。 二.什么是窗口函数?窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。 窗口函数的基本语法如下:
那么语法中的<窗口函数>都有哪些呢?<窗口函数>的位置,可以分为以下两种函数:
因为窗口函数是对 where 或者 group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。 三.如何使用?接下来,就结合实例,给大家介绍几种窗口函数的用法。 1.专用窗口函数rank例如下图,是班级表中的内容 如果我们想在每个班级内按成绩排名,得到下面的结果。 以班级“1”为例,这个班级的成绩“95”排在第1位,这个班级的“83”排在第4位。 上面这个结果确实按我们的要求在每个班级内,按成绩排名了。 得到上面结果的sql语句代码如下:
我们来解释下这个sql语句里的select子句。rank是排序的函数。 要求是“每个班级内按成绩排名”,这句话可以分为两部分:
通过下图,我们就可以理解partiition by(分组)和order by(在组内排序)的作用了。 窗口函数具备了我们之前学过的group by子句分组的功能和order by子句排序的功能。 那么,为什么还要用窗口函数呢?这是因为,group by分组汇总后改变了表的行数,一行只有一个类别。 而partiition by和rank函数不会减少原表中的行数。例如下面统计每个班级的人数。 相信通过这个例子,你已经明白了这个窗口函数的使用:
现在我们说回来,为什么叫“窗口”函数呢?这是因为partition by分组后的结果称为“窗口”,这里的窗口不是我们家里的门窗,而是表示 "范围" 的意思。 简单来说,窗口函数有以下功能:
2.其他专业窗口函数专用窗口函数rank, dense_rank, row_number有什么区别呢?
得到结果: 从上面的结果可以看出:
这三个函数的区别如下: 最后,需要强调的一点是:
Note
3.聚合函数作为窗口函数聚和窗口函数和上面提到的专用窗口函数用法完全相同,只需要把聚合函数写在窗口函数的位置即可,但是函数后面括号里面不能为空,需要指定聚合的列名。 我们来看一下窗口函数是聚合函数时,会出来什么结果:
得到结果: 有发现什么吗?我单独用sum举个例子: 如上图,聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。 比如0004号,在使用sum窗口函数后的结果,是对0001,0002,0003,0004号的成绩求和,若是0005号,则结果是0001号~0005号成绩的求和,以此类推。 不仅是sum求和,平均、计数、最大最小值,也是同理,都是针对自身记录、以及自身记录之上的所有数据进行计算,现在再结合刚才得到的结果(下图),是不是理解起来容易多了? 比如0005号后面的聚合窗口函数结果是:学号0001~0005五人成绩的总和、平均、计数及最大最小值。 如果想要知道所有人成绩的总和、平均等聚合结果,看最后一行即可。 这样使用窗口函数有什么用呢?
四. 注意事项partition子句可是省略,省略就是不指定分组,结果如下,只是按成绩由高到低进行了排序:
得到结果: 但是,这就失去了窗口函数的功能,所以一般不要这么使用。 五. 总结1.窗口函数语法
<窗口函数>的位置,可以放以下两种函数:
2.窗口函数有以下功能:
3.注意事项
4.窗口函数使用场景1)业务需求“在每组内排名”,比如:
下一次会跟大家分享一些窗口函数的面试题,从而让各位在面试、工作中都能遇到这类问题,就想到哦,这用窗口函数就可以解决。 后续补充 .... |
3.问题/补充
TBD |
4.参考
https://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==&mid=2649247566&idx=1&sn=f9c7018c299498673b38221db2ecd5cd // 通俗易懂的学会:SQL窗口函数 https://leetcode-cn.com/problems/rank-scores/solution/tu-jie-sqlmian-shi-ti-jing-dian-pai-ming-wen-ti-by/ // leetcode 178. 分数排名 |
后续补充
...
MySQL - SQL窗口函数相关推荐
- SQL窗口函数-聚合窗口函数
关于窗口函数的基础,请看文章SQL窗口函数 许多常见的聚合函数也可以作为窗口函数使用,包括AVG().SUM().COUNT().MAX()以及MIN()等函数. 案例分析 案例使用的示例表 下面的查 ...
- SQL 窗口函数速查表
文章目录 窗口函数概述 PARTITION BY ORDER BY 窗口大小 SQL 子句逻辑执行顺序 常用窗口函数 排名窗口函数 取值窗口函数 聚合窗口函数 大家好!我是只谈技术不剪发的 Tony ...
- SQL窗口函数-MySQL-leetcode刷数据库题目必备知识
目录 背景: 窗口函数的介绍: 窗口函数的应用场景: 支持窗口函数的查询元素: 窗口函数的案例博客链接: 背景: 在leetcode刷数据库题目时,凡是中等难度及困难难度的题目必涉及到SQL窗口函数的 ...
- php mysql sql mode_Mysql之SQL Mode用法详解_MySQL
一.Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进行量身定制以满足自己的需求.这 ...
- Atitit.软件GUI按钮与仪表盘--db数据库区--导入mysql sql错误的解决之道
Atitit.软件GUI按钮与仪表盘--db数据库区--导入mysql sql错误的解决之道 Keyword::截取文本文件后部分 查看提示max_allowed_packet限制 Target Se ...
- Mysql SQL Mode详解
Mysql SQL Mode简介 MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进行量身定制以满足自己的需求.这类模式定义了 ...
- 导出mysql sql语句吗_mysql sql语句导入与导出
mysql sql语句导入与导出 导入: mysql -u root -p 数据库名 如: C:/mysql/bin>mysql -u root -p house < c:/1-1.txt ...
- mysql sql语句大全
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...
- mysql sql优化书籍_MySQL SQL优化的正确姿势
大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 已经很久没写文章了 今天分享一篇优化SQL 案例 slow query 里有如下 SQL 看下执行计划如下 从执行计划可以看出C表全表扫描了 那 ...
最新文章
- S - Extended Traffic LightOJ - 1074
- ubuntu18.04配置wifi 方法
- 按键控制LED实现启动、停止按钮
- 1044 火星数字 (20 分)(c++)
- com/mysql/jdbc/statementimpl_com.mysql.jdbc.异常.jdbc4。通信异常:通信链路故障
- 01章.计算机网络概述(1.1~1.6)
- TypeError: 'str' object is not callable
- 对聊天室项目的NABCD的分析
- HDOJ水题集合6:杂题
- jquery基本选择器:id选择器、class选择器、标签选择器、通配符选择器
- Python中被双下划线包围的魔法方法
- 基于javaweb宠物领养平台管理系统设计和实现
- IBM ServerGuide引导盘全系列下载网址
- SegNet论文笔记及其创新点代码解析
- matlab分位数回归,分位数回归及其实例
- 手机分辨率Android教程(十二)-- 使用DisplayMetrics获取手机分辨率
- 黑马程序员各学科超长体验课知识点汇总
- scratch 有趣的加减法
- Visual C++ 6.0 ( VC 6 )带 SP6 中英文双语版 下载
- 【学海】再看傅里叶变换和欧拉公式