select函數_SQL高級功能:窗口函數

74d96c5dd410894d0b1e064e4bf4afe0.png

一、窗口函數有什么用?

在日常生活中,經常會遇到需要在每組內排名,比如下面的業務需求:

排名問題:每個部門按業績來排名

topN問題:找出每個部門排名前N的員工進行獎勵

面對這類需求,就需要使用sql的高級功能窗口函數了。

二、什么是窗口函數,也叫OLAP函數(Online Anallytical Processing,聯機分析處理),可以對數據庫數據進行實時分析處理。

窗口函數基本語法如下:

<窗口函數> over (partition by <用于分組的列名> order by<用于排序的列名>)

窗口函數的位置,可以放以下兩種函數:

1)專用窗口函數:rank,dense_ rank, row_number

2) 聚合函數:sum,avg,count,max,min

因為窗口函數是對where 或者group by 子句處理后的結果進行操作,所以窗口函數原則上只能寫在select 子句中。

1.專用窗口函數rank

a08bb3f0e104c0a7723176bd5ac22c12.png

想要每個班級內按成績排名的結果

select *,
rank() over(partition by 班級 order by 成績 desc) as ranking
from 班級表

b7f8fc99feeec4eb1f85ba2c2e159e55.png

為什么叫“窗口”函數?

因為partition by分組后的結果稱為“窗口”,表示“范圍”的意思。

簡單來說,窗口函數有以下功能:

1)同時具有分組和排序的功能

2)不減少原表的行數

3)語法見前

2.專用窗口函數rank,dense_rank, row_number有什么區別?

select *,
rank() over(order by 成績 desc) as ranking
dense_rank() over(order by 成績 desc) as dense_rank
row_number() over(order by 成績 desc) as row_num
from 班級表

15e97823a872c788dd7d58989cce78ff.png

從上面結果可以看出:

rank 函數:如果有并列名次的行,會占用下一名次的位置。

dense_rank 函數:如果有并列名次的行,不占用下一名次的位置。

row_number函數:不考慮并列名次的情況。

3. top N問題

每組最大的N條記錄

select * 
from (select *,row_number() over(partition by 要分組的列名order by 要排序的列名 desc) as ranking from 表名)
where ranking<=N;

4.聚合窗口函數

select *,
sum(成績) over(order by 學號) as current_sum
from 班級表

e91bf869b7a24fdc5fa9aa6d01797e69.png

如上圖,聚合函數sum在窗口函數中,是對自身記錄、及位于自身記錄以上的數據進行求和的結果。平均、計數、最大最小值也是同理。

這樣使用窗口函數有什么用?

聚合函數作為窗口函數,可以在每一行的數據里直觀的看到,截止到本行數據,統計數據是多少(最大值、最小值等)。同時可以看出每一行數據,對整體統計數據的影響。

5.查找單科成績高于該科目平均成績的學生名單

1)窗口函數法

select * 
from(select *,avg(成績) over(partition by 科目) as avg_score from 成績表) as b
where 成績>avg_score

2)關聯子查詢法

見之前文章

6.窗口函數的移動平均

select *,
avg(成績) over(order by 學號 rows 2 preceding) as current_avg
from 班級表

232394e5933cd8993f97ed388c7be29c.png

每一行得到的結果,都是當前行和前面2行的平均(共3行)。

這樣使用窗口函數有什么用呢?

在公司業績名單排名中,可以通過移動平均,直觀地查看到與相鄰名次業績的平均、求和等統計數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537296.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

客戶端C++與前端js交互

客戶端與前端交互 qwebchannel.js文件引入建立通信// c發送消息給js new QWebChannel(qt.webChannelTransport, function(channel){var content channel.objects.jsContext;// 建立通信后&#xff0c;客戶端通過調用 sMsg 方法來執行后面的回調函數&#xff0c;從而實現c與j…

python動態映射_sqlalchemy動態映射

似乎您可以直接使用屬性&#xff0c;而不是使用columnsdict。考慮以下設置&#xff1a;from sqlalchemy import Table, Column, Integer, Unicode, MetaData, create_enginefrom sqlalchemy.orm import mapper, create_sessionclass Word(object):passwordColumns [english, k…

linux外接顯示屏,關掉本身的筆記本電腦

https://blog.csdn.net/a2020883119/article/details/79561035 先用xrandr命令查看&#xff1a; eDP-1 connected eDP-1是連接著的 關掉&#xff1a;sudo xrandr --output eDP-1 --off 打開&#xff1a;sudo xrandr --output eDP-1 --auto

發揮項目“臨時性”威力,讓項目順利實施

所謂臨時性,就是要有明確的“開始”和“結束”。雖然大家都知道項目一定會有開始和結束的,但要更多地關注“明確“。 問題1:問商務(售前)或業主,這個項目什么時候結束? 答:商務或業主他們有時候也不知道,因為國內的項目大多數是提前開始交付,是一邊交付,一邊把里程…

上拉加載更多后臺數據_6-7【微信小程序全棧開發課程】記錄頁面(七)--分頁加載記錄數據...

現在是一次性加載所有的記錄數據&#xff0c;數據多的時候&#xff0c;會加載比較慢&#xff0c;所以我們改成分頁加載&#xff0c;一次最多加載15條數據每次拉倒底部都會自動加載下一頁的數據&#xff0c;知道所有的數據加載完成1、添加data變量編輯record.vue文件&#xff0c…

spring cloud eureka服務注冊和調用

SPRING INITIALIZR構建工程 spring boot 可通過SPRING INITIALIZR構建項目訪問SPRING INITIALIZR官網&#xff0c;填寫項目相關信息后&#xff0c;生成項目。將下載的項目解壓&#xff0c;打開idea&#xff0c;file-->new-->project from existing sources。import proje…

去從事有門檻有積累的工作

現在社會的IT工作&#xff0c;一時風光無限&#xff0c;但是積累性不足。跟老外比較起來&#xff0c;國內的IT算是民工級別的。再加上&#xff0c;前些年的培訓機構&#xff0c;不斷的輸出水平很次但很能加班的「人才」進入這個行業&#xff0c;「劣幣驅逐良幣」的效果下&#…

打印工資條怎么做到每個人都有表頭明細_朋友說:能不能用python,幫我寫一個“制作工資條”的自動化程序?...

本文說明今天和一個朋友吃飯&#xff0c;她說我經常使用Excel制作工資條&#xff0c;但是每個月都要做一遍&#xff0c;你能不能用python寫一個代碼&#xff0c;能夠自動化完成這個工作。這當然可以啦&#xff0c;就是這么牛逼&#xff01;我們先來看看原始數據是什么樣子的。那…

自定義按鈕 圖片標題位置隨意放置

自定義按鈕UIControl 寫在前面 #圖標和文字在一起是開發難免的問題&#xff0c;系統的按鈕默認是圖片居左的文字居右的&#xff0c; 且圖片和文字的距離不好調整&#xff0c;圖片的位置更是讓人頭疼&#xff0c; 故在閑暇之余封裝了一個控件。 復制代碼所用到知識的 # 1、蘋果系…

做優化的數據庫工程師請參考!CynosDB的計算層設計優化揭秘

本文由云社區發表本文作者&#xff1a;孫旭&#xff0c;騰訊數據庫開發工程師&#xff0c;9年數據庫內核開發經驗&#xff1b;熟悉數據庫查詢處理&#xff0c;并發控制&#xff0c;日志以及存儲系統&#xff1b;熟悉PostgreSQL&#xff08;Greenplum&#xff0c;PGXC等&#xf…

netty發送數據_看完這篇還不清楚Netty的內存管理,那我就哭了

說明在學習Netty的時候&#xff0c;ByteBuf隨處可見&#xff0c;但是如何高效分配ByteBuf還是很復雜的&#xff0c;Netty的池化內存分配這塊還是比較難的&#xff0c;很多人學習過&#xff0c;看過但是還是云里霧里的&#xff0c;本篇文章就是主要來講解&#xff1a;Netty分配池…

數字化改革體系架構“152”兩次迭代升級為“1612”

數字化改革體系架構已經完成兩次迭代&#xff0c;152-1512-1612。 2021年&#xff0c;浙江在全國率先啟動一項關系全局、影響深遠、制勝未來的重大集成改革——數字化改革&#xff0c;并確定為全面深化改革的總抓手。 2021年2月18日&#xff0c;數字化改革大會“152”工作體系…

微軟希望每個人有自己的人工智能朋友

微軟正在和其他公司那樣投資和研發人工智能技術&#xff0c;同時微軟也希望人工智能技術能夠深入我們的日常生活。 為此微軟正在申請新的專利技術希望每個人在社交網絡上都有自己的人工智能朋友可以隨時隨地的溝通交流。 實際上該專利屬于已經實踐的內容再來申請專利技術的&…

python 40位的數減個位數_Python數據分析入門教程(五):數據運算

作者 | CDA數據分析師進行到這一步就可以算是開始正式的烹飪了&#xff0c;在這部分之前的數據操作部分我們列舉了一些不同維度的分析指標&#xff0c;這一章我們主要看看這些指標都是怎么計算出來的。一、算術運算算術運算就是基本的加減乘除&#xff0c;在Excel或者Python中數…

數字化改革“152”體系詳解

架構圖 “1” 即一體化智能化公共數據平臺&#xff08;平臺大腦&#xff09;&#xff0c;按照“統一規劃、統一支撐、統一架構、統一平臺、統一標準、統一建設、統一管理、統一運維"的要求&#xff0c;建設省市縣三級公共數據平臺&#xff0c;疊加三級“大腦功能&#xf…

數字化改革“141”體系

縣級以上是“152”大框架&#xff0c;縣以下是“141”體系。 141體系是&#xff1a;縣級社會治理中心、鄉鎮&#xff08;街道&#xff09;基層治理“四個平臺”、村社網格。 “1” 第一個“1”指縣級社會治理中心。 “4” 第二個“4”指鄉鎮&#xff08;街道&#xff09;基…

spring boot——MockMvc的用法

1.pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> 2.所需對象及Controller public class User {private String id;private String username;private…

python一元加號_Python一元方程解算系統(需要Sympy庫支持)

解算案例本文為實現python一元方程解算的源碼案例(后續不定期更新)# -*- coding: UTF-8 -*-from sympy import *#設置一些可能拋出的異常def Warn(type):if type "missEquater":print "You missed the euqater!"elif type "excessiveEquater":…

接口做的好怎么形容_淘寶直播預告怎么做才合格?如何做好?

很多淘寶商家在直播前沒有做淘寶直播預告&#xff0c;或者不知道怎么去做直播預告&#xff0c;這對直播的效果會有很大的影響&#xff0c;那么直播前如何做好直播預告呢?怎樣的直播預告才是合格的&#xff0c;下面來了解一下。1.必須去淘寶直播中控臺發布。因為手機上發布目前…

“1+7+N”改革工作體系介紹

2021年&#xff0c;浙江省確定了“17N”的改革工作體系&#xff0c;要求以全面深化改革新成效再創體制機制新優勢。&#xff08;2022年已經升級為“1612N”&#xff0c;點擊閱讀&#xff09; “1” 數字化改革&#xff0c;這是浙江全面深化改革的總抓手。將聚焦打造全球數字變…