一、窗口函数

1、基本语法

<

2、大概分类

专用窗口函数

比如 rank,dense_rank, row_number等

聚合函数

比如 sum,count,avg,max,min等

二、如何使用窗口函数(聚合函数作为窗口函数)

1、聚合函数 + over()函数

问题:求每个店铺,每天的销量和全部销量的均值对比;

店铺销量表——shop_sale
-- 一般的解决办法

第一段代码虽然可以实现我们的需求,但代码略繁琐,窗口函数可以简化代码;

over()函数的作用,就是将聚合结果显示在每条单独的记录中。

2、partition by 子句

上面的例子,展示的是“每个店铺,每天销量和全部销量均值作比较”;

但如果店铺之间的差异不大,那么用全部销量的均值作为比较标准还可以,如果店铺之间的销量差异很大,那么就不具备可比性了,店铺销量自己和自己比;

这里的需求分成2部分,一是所有店铺的每日销量,二是店铺的销量均值;

-- 一般的解决方案

partition by 的作用类似于 group by,但确实在over()函数中使用,按照指定的列进行分组,聚合函数就会在分好的组内运算。

3、order by 子句

order by 子句比较好理解,即在over()函数中进行指定的排序;

为什么需要order by子句呢?还是用上面的例子。

上面的例子,考虑到了店铺之间销量的差异问题,所以店铺用自己的销量均值作比较,但还是不够严谨,因为我们不能用未来的信息和现在的信息进行比较;

比如 1月2日的销量,在求均值时就不应该包含1月3日的销量,而只应该包括1月2日及之前的销量,这种聚合方式也被叫做【顺序聚合】。

select 

三、专用窗口函数

1、序列函数:rank,dense_4rank,row_number,以及3者的区别:

select 

案例:如何使用排名函数解决 Top N 问题——每组最大/小的N条记录

按课程号分组取成绩最大值所在行的数据

笨办法 , 关联子查询

select 

窗口函数的解题思路

select 

2、ntile()函数

ntile()函数,是在默认不对表进行任何操作之前,进行切片分组。

select 

先按照 shopname 分组,然后在组内按照销量升序排列,最后切片分组

3、lag() 和 lead() 函数

lag()是指向后移动,lead()是指向前移动;

怎么理解这2个函数?

lag(),就相当于在Excel中,某个单元格前面插入一行时,【活动单元格下移】;

lead(),则相当于【活动单元格上移】,只不过Excel中没有这个选项罢了;

这2个函数有什么用?

比如说:按照shopname分组,求各分组内,前后2天的销量之差。

select 

运行结果

4、移动平均

rows 行数 preceding,表示本行以及前2行的平均。

select 

四、总结

1、窗口函数的功能:

1、同时具有分组和排序的功能;
2、不减少原表的行数,经常用于组内排名;

2、注意事项:

窗口函数是对where 或 group by 子句处理后的结果进行操作,所以窗口函数理论上只能写在select子句中。

3、窗口函数的使用场景:

1、Top N问题
2、排名问题
3、组内比较问题(聚合函数)
4、移动平均

mysql 窗口函数_7、MySQL高级功能(窗口函数)相关推荐

  1. SQL高级功能-窗口函数及其经典题目

    窗口函数 1.窗口函数有什么用? 2.什么是窗口函数? 3.如何使用窗口函数 1.专用窗口函数rank 2.专用窗口函数rank, dense_rank, row_number的区别 4.经典面试问题 ...

  2. select函数_SQL高级功能:窗口函数

    一.窗口函数有什么用? 在日常生活中,经常会遇到需要在每组内排名,比如下面的业务需求: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 面对这类需求,就需要使用sql ...

  3. sql取最大值的那一行_从零学会SQL:SQL高级功能

    一.什么是窗口函数 1.什么是窗口函数? 窗口函数,也叫OLAP函数(Online Analytical Processing,联机分析处理),可以对数据库数据进行实时分析处理. 窗口函数的基本语法如 ...

  4. sql server累计求和函数_SQL基础--SQL高级功能

    一.窗口函数有什么用? 在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 面对这类需求,就需要使用sql ...

  5. sql取整数_SQL高级功能

    1.窗口函数 窗口函数用于日常工作中,经常会遇到的需要在每组内排名的问题,比如: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 此时需要使用sql的高级功能窗口函数 ...

  6. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  7. mysql olap 函数_Mysql中的窗口函数

    窗口函数初识 窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行实时分析处理.窗口函数和group by有类似之处,其区别在于窗口会对 ...

  8. MySql 8.0新特性:窗口函数

    MySQL8.0新特性:窗口函数 1.1 使用窗口函数前后对比 假设我现在有这样一个数据表,它显示了某购物网站在每个城市每个区的销售额: CREATE TABLE sales( id INT PRIM ...

  9. python数据库模块_十二、Python高级功能之Mysql数据库模块

    Python高级功能之Mysql数据库模块 安装python mysql组件 # yum -y install MySQL-python.x86_64 以下根据实例来说明: >>> ...

最新文章

  1. java string()函数_从Java中的String函数返回String构建器?
  2. 【mysql学习笔记整理】
  3. springboot学习笔记(三)
  4. 物理化学 化学平衡
  5. 【shell】Shell脚本的学习笔记
  6. Mybatis核心配置文件SqlMapConfig.xml
  7. SAC 智能版面分析技术(structure Analysis Core )
  8. Python程序设计语言基础01:Python基本语法元素
  9. P1279 字串距离 (动态规划)
  10. python 0xa什么意思_python使用xpath中遇到:Element a at 0x39a9a80到底是什么?
  11. 初识liux简单命令
  12. 《王道》数据结构笔记整理2022
  13. 【考研日记1】:看到2016年数学考的如此之难后
  14. 对经太空搭载的“神舟三号口服液”口服液的生产菌株进行了科学鉴定.^
  15. 群友问题,如何面对繁杂的数据需求?
  16. 王者荣耀静态页面头部代码设计(2)
  17. 电竞达人最爱五款真无线蓝牙耳机,听声辨位低延迟TWS蓝牙耳机助你《夺冠》
  18. chrom如何兼容本地file文件
  19. iic获取salve设备地址_Linux下使用IIC总线读写EEPROM(读写i2c从设备通用程序)
  20. JAVA基础第二章 面向对象进阶

热门文章

  1. Python 基础 —— sorted
  2. for循环 与 while循环
  3. linux播放光盘花屏,求助fedora光盘安装花屏怎么解决
  4. 华为的型号命名规则_华为光模块的型号命名规则是怎样的?
  5. 屏幕为什么要正负压供电_焦炉煤气脱硫为什么要选择负压脱硫工艺?
  6. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列图文详解
  7. 笔记本电脑下载python视频-如何用Python在笔记本电脑上分析100GB数据(下)
  8. python画50个图-python 实现在一张图中绘制一个小的子图方法
  9. python自学要多久-python从入门到精通需要多久?你需要先明白这两个点
  10. 遵义 计算机应用能力,遵义市人力资源和社会保障局