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.pswp.cn/news/259808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259808.shtml
英文地址,請注明出處:http://en.pswp.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;該算法也成為其他搜索引…