MYSQL窗口函数用法
insert into order_table VALUES(1,001,100,'2018-01-01 00:00:00');
insert into order_table VALUES(2,001,300,'2018-01-02 00:00:00');
insert into order_table VALUES(3,001,500,'2018-01-02 00:00:00');
insert into order_table VALUES(4,001,800,'2018-01-03 00:00:00');
insert into order_table VALUES(5,001,900,'2018-01-04 00:00:00');
insert into order_table VALUES(6,002,500,'2018-01-03 00:00:00');
insert into order_table VALUES(7,002,600,'2018-01-04 00:00:00');
insert into order_table VALUES(8,002,300,'2018-01-10 00:00:00');
insert into order_table VALUES(9,002,800,'2018-01-16 00:00:00');
insert into order_table VALUES(10,002,800,'2018-01-22 00:00:00');
按照功能划分,可以把MySQL支持的窗口函数分为如下几类:
- 序号函数:row_number() / rank() / dense_rank()
- 分布函数:percent_rank() / cume_dist()
- 前后函数:lag() / lead()
- 头尾函数:first_val() / last_val()
- 其他函数:nth_value() / nfile()
select order_id,user_no,amout,creat_date,row_number()over(partition by user_no order by amout desc) as rank_no from order_table
三、窗口函数如何使用
窗口函数的基本用法如下:
函数名([expr]) over子句
其中,over是关键字,用来指定函数执行的窗口范围,如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,窗口函数基于所有行进行计算;如果不为空,则支持以下四种语法来设置窗口:
- window_name:给窗口指定一个别名,如果SQL中涉及的窗口较多,采用别名可以看起来更清晰易读。上面例子中如果指定一个别名w,则改写如下:
select * from
(
select row_number()over w as row_num,
order_id,user_no,amount,create_date
from order_tab
WINDOW w AS (partition by user_no order by amount desc)
)t ;
- partition子句:窗口按照那些字段进行分组,窗口函数在不同的分组上分别执行。上面的例子就按照用户id进行了分组。在每个用户id上,按照order by的顺序分别生成从1开始的顺序编号。
- order by子句:按照哪些字段进行排序,窗口函数将按照排序后的记录顺序进行编号。可以和partition子句配合使用,也可以单独使用。上例中二者同时使用,如果没有partition子句,则会按照所有用户的订单金额排序来生成序号。
- frame子句:frame是当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用。比如要根据每个订单动态计算包括本订单和按时间顺序前后两个订单的平均订单金额,则可以设置如下frame子句来创建滑动窗口:
MYSQL窗口函数用法相关推荐
- MYSQL窗口函数用法及区别
本博客转自:https://blog.csdn.net/weixin_34384915/article/details/87551597 窗口函数(OLAP 实时分析处理函数) ,可以一般聚合函数无法 ...
- mysql存储过程知识点_知识点:Mysql 基本用法之存储过程
存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...
- mysql高级用法(函数)
mysql 高级用法 # CONCAT 函数用于将两个字符串连接为一个字符串 SELECT CONCAT(businfo_name,businfo_creditCode) FROM tb_businf ...
- Mysql Explain用法pdf
<Mysql Explain用法pdf> 下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731040.html
- MySQL窗口函数简介
原文地址:https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_last-value 译 ...
- Mysql limit用法
MYSQL limit用法 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. Sql代 ...
- c语言中limit 用法,mysql limit用法及优化详解
摘要 腾兴网为您分享:mysql limit用法及优化详解,一点万象,喜马拉雅,唯品会,图乐等软件知识,以及盟重土城花屏补丁,宝马车主俱乐部,本地文件搜索,锁定刷新率,发券,微信多开真正版,云门禁,真 ...
- 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)
企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制) 1.基于GDIT的半同步复制 为什么要实现mysqI的复制 1.实现服务器负载均衡 2.通 ...
- mysql explain 实例_Mysql实例mysql explain用法学习
<Mysql实例mysql explain用法学习>要点: 本文介绍了Mysql实例mysql explain用法学习,希望对您有用.如果有疑问,可以联系我们. 导读:本节内容:mysql ...
最新文章
- 性能优化之Java(Android)代码优化
- Mule ESB 学习笔记(11)Web Service Proxy(这里是一个可以正常运行的例子)
- VIDI软件在粗糙金属表面缺陷检测中的应用
- 4修改初始值_Java基础篇4——循环
- 为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?
- kindeditor图片批量上传失败问题
- php在那个位置加载语言包,thinkphp 3.23语言包加载
- MS3D model 的 Frame count
- .NET Core 2.1 Preview 2带来网络方面的改进
- html和css实现时间表,前端 CSS : 6# 纯 CSS 实现时间线
- JMF实现对USB视频数据捕捉和应用
- 光纤温度传感器在电力系统的应用
- 当程序员变成软件项目经理
- 对接支付宝、微信、第三方支付,超详细讲解+demo演示
- 初一作文写作技巧,中学写作文的七大技巧
- keras 中adam_ADAM电影中的照明技巧和窍门
- 【2022新版】Java 终极学习路线(文末高清大图)-共计9大模块/6大框架/13个中间件
- Cadence Allegro通孔PAD制作图文教程及视频演示
- 【机器学习】树模型遇上类别型特征(Python)
- H5游戏开发-面向对象编程