mysql over rank_SQL学习笔记 - 窗口函数OVER

Window Function 窗口函数

  • Perform calculations on an already generated result set ( a window).(在已生成的结果集上执行计算)
  • Aggregate calculation(without having to group your data)(允许使用聚合函数时不用进行GROUP BY分组)
    • Similar to subqueries in SELECT.
    • Running totals, rankings, and moving averages, etc.(可计算累加值,排序,移动平均值等)
  • Processed after every part of query except ORDER BY.(执行顺序在其他各部分之后,但在ORDER BY 之前)
    • Uses information in result set rather than database.
  • Available in PostgreSQL, Oracle, MySQL, SQLServer, and SQLite.

窗口函数是 SQL 中一类特别的函数。和聚合函数相似,窗口函数的输入也是多行记录。不同的是,聚合函数的作用于由 GROUP BY 子句聚合的组,而窗口函数则作用于一个窗口, 这里,窗口是由一个 OVER 子句 定义的多行记录。

聚合函数对其所作用的每一组记录输出一条结果,而窗口函数对其所作用的窗口中的每一行记录输出一条结果。

语法

FUNCTION(value) OVER ([PARTITION BY field] [ORDER BY field])注:[]中的内容可省略,根据实际情况选择使用。

PARTITION BY = range of calculation根据指定(1个或多个)字段进行分区,类似GROUP BY

ORDER BY = order of rows when running calculation 根据指定字段进行排序

常用函数

  • 专用窗口函数

ROW_NUMBER() :从1开始,返回每组内部排序后的顺序编号(组内连续的唯一的)

RANK():计算排序,如果存在相同位次的记录,为相同的值分配相同的数字,但会跳过之后的位次。

DENSE_RANK():同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。

如:

SELEECT goals,RANK() OVER(ORDER BY goals DESC) AS goals_rank,DENSE_RANK() OVER(ORDER BY goals DESC) AS goals_dense_rank,ROW_NUMBER() OVER(ORDER BY goals DESC) AS row_number 
FROM grade
ORDER BY goals DESC;结果如下:goals        goals_rank        goals_dense_rank          row_number
10              1                 1                        1
10              1                 1                        2
9               3                 2                        3
9               3                 2                        4
7               5                 3                        5    

LAG(column, n):returns column's value at the row n rows before the current row. 返回当前行之前第n行的值(n省略时默认为1,表示返回当前行前1行的值)。

LEAD(column, n) : returns column's value at the row n row after the current row. 返回当前行之后第n行的值。

FIRST_VALUE(column):return the first value in the table or partition. 返回表中或分区中第一个值。

LAST_VALUE(column):return the last value in the table or partition. 返回表中或分区中最后一个值。

NTILE(n):splits data into n approximately equal pages. 将数据分为近乎相等的n等份。(暂时用的场景不多,以后再补充)

  • 聚合函数: SUM, AVG, COUNT, MAX, MIN 也可以用于窗口函数。

分区示例

c418d5b12b9e0e80b80302eb4c3b554e.png
图1 未使用PARTITION BY

5298691aec88670be5bc6f62b8c3061d.png
图2 根据season进行分区

图1中 AVG(home_goal + away_goal) OVER() AS overall_avg,未使用PARTITION BY进行分区,所以计算的是总体的平均值。

图2中 AVG(homegoal + awaygoal) OVER(PARTITION BY season) AS season_avg,对season (表中的一个字段)进行分区,再计算分区内的平均值。

d727e6d318f6f5ce2476a2d2f0a531ed.png
根据多个列进行分区

PARTITION BY 允许针对1列或多列进行分区,图3 中同时根据m.season和c.name 进行分组后在计算分组内的平均值。所以,第一行和第三行的 season_ctry_avg值相同。


Sliding Window 滑动窗口

In addition to calculating aggregate and rank information, window functions can also be used to calculate information that changes with each subsequent row in a data set. These types of window functions are called sliding windows.

除了计算汇总、聚合和排序等,窗口函数还可以用于计算随数据集中的每个后续行而变化的信息。这类窗口功能称为滑动窗口。

Sliding windows are functions that perform calculations relative to the current row of a data set. 滑动窗口是执行相对于数据集当前行的计算的功能。

You can use sliding windows to calculate a wide variety of information that aggregates one row at a time down your data set -- running totals, sums, counts, and averages in any order you need.

A sliding window calculation can also be partitioned by one or more column just like a non-sliding window.

滑动窗口 关键字(加在OVER从句中)

ROWS BETWEEN <start> AND <finish>

可用于start 和finish 的关键字有:

  • PRECEDING : n PRECEDING means n rows before the current row 当前行的之前第n行
  • FOLLOWING : n FOLLOWING means n row after the current row 当前行之后的第n行
  • UNBOUNDED PRECEDING : every row since the beginning of the data set 数据集的开始
  • UNBOUNDED FOLLOWING : every row to the end of the data set 数据集的末尾
  • CURRENT ROW : tells SQL that you want to stop your calculation at the current row 当前行

示例

35d204ab5b70ecf283ec12a74fca3d22.png
计算从最开始至当前行的累加

fcc3d9e26d6093842bd8a884dc914e7d.png
计算前一行和当前行的值

灵活运用窗口函数,可以对原始数据进行更为复杂的运算和分组,可以从不同角度看待数据,并从中发现更深层次的规律和结论。

你的点赞是我持续更新的动力~ 谢谢 Thanks♪(・ω・)ノ

其他SQL学习笔记 友情链接:

JessieY:SQL学习笔记 - CTE通用表表达式和WITH用法​zhuanlan.zhihu.com
JessieY:SQL学习笔记 - CASE WHEN THEN​zhuanlan.zhihu.com
JessieY:SQL学习笔记 - GROUP BY / JOIN / UNION​zhuanlan.zhihu.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用boost库实现traceroute小工具

参考了网上几个 traceroute的实现版本&#xff0c;存在一些缺陷&#xff0c;比如没有做超时处理&#xff0c;或者只能在window下使用。自己用boost实现了一个traceroute小工具&#xff0c;在window下正常运行。 先来看下面实现的原理。这些说明来自维基百科。traceroute&#x…

Win系统利用本地安全策略全面禁止360等软件的安装与运行-1

这个理论应该也可以用在域对下设域用户上.各位不知道有没有这种经历&#xff0c;机子让别人玩了一上午&#xff0c;回来发现&#xff0c;自己干干净净的系统多了一堆某某安全助手&#xff0c;某某杀毒&#xff0c;某某手机助手等等&#xff0c;最可恨的还是不知一系列的&#x…

php配置文件php.ini的详细解析(续)

file_uploads On //是否允许文件上传 upload_tmp_dir "d:/wamp/tmp" //上传文件的临时目录&#xff0c;默认为“/wamp/tm…

服务器iis7.5 配置文件,使用注册表项 - Internet Information Services | Microsoft Docs

Internet 信息服务使用的注册表项的说明07/21/2020本文内容本文介绍了 Microsoft Internet Information Services (IIS) 在 Windows 上使用的注册表项。原始产品版本&#xff1a; Internet information Services原始 KB 数&#xff1a; 954864简介本文还包含有关如何修改注…

access考试素材_NCRE考试当天常见问题处理办法及各科目注意事项大汇总

温馨提醒为了方便大家在21-22号讨论考试抽中的题目&#xff0c;请自觉加入QQ群&#xff1a;776167039考试当天常见问题及处理办法大汇总问题一&#xff1a;考试当天忘记带身份证和准考证原因&#xff1a;这种情况&#xff0c;要么是忘了&#xff0c;要么真没有提前领到准考证。…

腾讯开源手游热更新方案,Unity3D下的Lua编程

写在前面\\xLua是Unity3D下Lua编程解决方案&#xff0c;自2016年初推广以来&#xff0c;已经应用于十多款腾讯自研游戏&#xff0c;因其良好性能、易用性、扩展性而广受好评。现在&#xff0c;腾讯已经将xLua开源到GitHub。\\2016年12月末&#xff0c;xLua刚刚实现新的突破&…

设置安全性根据Folder关联的条目模板设置上传文档安全性

文章结束给大家来个程序员笑话&#xff1a;[M] 在XT上可以设预条目模板&#xff08;EntryTemplate&#xff09;来到达模板化制控上传文档安全性和属性等信息的作用。而EntryTemplate本身可以与Folder相干联&#xff08;一个Folder可以关联多个EntryTemplate&#xff09;&#x…

surfaceView中的线程问题

问题描述我在surfaceView中的surfaceCreated方法中start线程&#xff0c;但是当我start一个其他activity后&#xff0c;又finish掉那个acvitity回来&#xff0c;又会走到这个surfaceCreated方法&#xff0c;这时候走到线程的start方法&#xff0c;它会报错Thread already exist…

1加6投屏_6月1日起驾考要加项目?真相是这样

来源&#xff1a;新闻晨报近日网上流传一则消息让还没考出驾照的朋友们瑟瑟发抖网传消息称&#xff0c;上海、海南、陕西、贵州、浙江等地驾考科目二于6月1日起加项&#xff0c;因而“朋友们要抓紧时间报名&#xff0c;录入旧系统”。网传消息截图上海6月1日起科目二考试增加到…

Java this关键字

this 关键字有三个应用&#xff1a;  1.this调用本类中的属性&#xff0c;也就是类中的成员变量  2.this调用本类中的其他方法  3.this调用本类中的其他构造方法&#xff0c;调用时要放在构造方法的首行 来看下面这段代码&#xff1a; public String name;public void sh…

linux下查看线程数的几种方法

1、 cat /proc/${pid}/status 2、pstree -p ${pid} 3、top -p ${pid} 再按H 或者直接输入 top -bH -d 3 -p ${pid} top -H手册中说&#xff1a;-H : Threads toggle加上这个选项启动top&#xff0c;top一行显示一个线程。否则&#xff0c;它一行显示一个进程。 4、ps xH手册…

网站等保测评针对服务器,互联互通测评知识分享之信息安全建设要点

原创 医疗测评实验室 中国软件评测中心 1周前医院互联互通测评&#xff0c;即国家医疗健康信息互联互通标准化成熟度测评&#xff0c;近年来随着政策的要求、需求的驱动、技术的更迭、价值的引领&#xff0c;越来越被业内人士接受和认可&#xff0c;测评热度也水涨船高。国家卫…

树樱花满树繁花

废话就不多说了&#xff0c;开始。。。 学院的樱花开了&#xff0c;花开的很盛&#xff0c;满树的繁花扬张着天春的力活。 武汉三月的时候樱花就开了&#xff0c;武大的学同在空间里发各种玩游的照片&#xff0c;真是羡煞旁人。大连的天春来得晚&#xff0c;但究终还是赶上了。…

pandas合并groupby_pandas实践之GroupBy()

官网地址&#xff1a;https://pandas.pydata.org/docs/reference/groupby.htmlpandas中对数据进行分组操作的方法&#xff0c;官方有很详细的教程。下面的案例是真实遇到的问题&#xff0c;看一看用pandas是如何解决的。构造数据import pandas as pdimport numpy as npdf pd.D…

自学 web 前端人怎么找工作?

1&#xff0c;你做过的项目可以体现你的价值。2&#xff0c;你的个人博客可以反映你的思考。3&#xff0c;你的GitHub页面可以展示你的项目。4&#xff0c;你项目中的代码可以看出你编程的风格。1&#xff0c;2&#xff0c;3&#xff0c;4之间有交集。当你能证明&#xff0c;你…

《Breakfast At Tiffanys》

"生活中似乎有些男性想象着能拯救和引导一个年轻美丽纯洁善良却迷茫的女子&#xff0c;有些女性也想象着能用自己的善良与包容来安慰一个才华横溢却饱经苦闷与贫穷的男子&#xff0c;老实说&#xff0c;这很有成就感。虽然我的语气有些讽刺&#xff0c;但我相信在这些“光…

项目不需要SVN控制的时候,该怎么办

今天要用一个项目&#xff0c;当项目不需要SVN控制的时候&#xff0c;我们一般怎么办哪&#xff1f;可能很多人设置Windows显示隐藏文件&#xff0c;然后将项目中的所有.svn文件删除。下面&#xff0c;从网上找了个非常简单的方法第一步&#xff1a;建立一个名字叫做remove-svn…

erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术

文章转载自微信公众号CSDN&#xff0c;作者冰清-小魔鱼&#xff0c;版权归原作者及刊载媒体所有。在定量遥感或者高光谱遥感中&#xff0c;信息提取主要用到光谱/波谱分析技术。本专题对光谱/波谱分析中涉及的流程及一些技术进行讲解&#xff0c;包括以下内容&#xff1a;基本概…

Zipkin-1.19.0学习系列1:java范例

2019独角兽企业重金招聘Python工程师标准>>> 官网地址: https://github.com/openzipkin/zipkin http://zipkin.io/ https://www.oschina.net/p/zipkin 截止到2017/1/4为止&#xff0c;最新版本为: Zipkin 1.19 下载地址: https://github.com/openzipkin/zipkin/arc…

PageRank算法

1. PageRank算法概述 PageRank,即网页排名&#xff0c;又称网页级别、Google左側排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出的链接分析算法&#xff0c;自从Google在商业上获得空前的成功后&#xff0c;该算法也成为其他搜索引…