plsql打开sql窗口快捷键_SQL干货|为你打开一扇窗—窗口函数
前言
很早之前就想寫一篇關(guān)于窗口函數(shù)的文章,因精力有限所以一直擱置了(一臉認(rèn)真的自我檢討),在這篇文章的準(zhǔn)備階段,我也拜讀了一些相關(guān)文章,總體來(lái)說(shuō)基本上所涉及的窗口函數(shù)相關(guān)知識(shí)均有涉及,但一萬(wàn)個(gè)讀者有一萬(wàn)個(gè)哈姆雷特,每個(gè)人的文章角度不同,本文主要是面向基礎(chǔ),希望能夠用通俗易懂的話語(yǔ)同時(shí)結(jié)合實(shí)際高頻面試題為大家打開(kāi)一扇“窗”。
正文
一、窗口函數(shù)簡(jiǎn)介
窗口函數(shù)也稱為OLAP函數(shù)。OLAP是online analytical processing的簡(jiǎn)稱,意思是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理。——百度百科
窗口函數(shù)的基本語(yǔ)法如下:
<窗口函數(shù)> over (partition by <用于分組的列名> order by <用于排序的列名>)窗口函數(shù)是針對(duì)定義的行集合執(zhí)行聚集分析,不減少原表的行數(shù)同時(shí)具備分組與排序的功能;通俗一點(diǎn)講,窗口函數(shù)會(huì)按照指定的列名分組,在組內(nèi)進(jìn)行排序,同時(shí)保持原表行數(shù)不發(fā)生變化;這與group by 分組聚合后每組返回一個(gè)值(原表行數(shù)改變)有明顯的區(qū)別。
窗口函數(shù)關(guān)鍵字:
over() : over子句中的內(nèi)容為窗口函數(shù)的作用域(范圍)
partition by :分組
order by : 排序
二、常用窗口函數(shù)介紹
1、排序函數(shù)
- rank() 如果有并列名次的行,會(huì)占用下一名次的位置
- dense_rank() 如果有并列名次的行,不會(huì)占用下一名次的位置
- row_number() 不考慮并列名次的情況
常用場(chǎng)景:
排序函數(shù)常用于組內(nèi)排序問(wèn)題,如:topN問(wèn)題 (找出每個(gè)部門排名前N的員工)
2、偏移函數(shù)
--基本語(yǔ)法lag(exp_str,offset,defval) over()Lead(exp_str,offset,defval) over()--exp_str要取的列--offset取偏移后的第幾行數(shù)據(jù)--defval:沒(méi)有符合條件的默認(rèn)值- lag() lag是用于統(tǒng)計(jì)窗口內(nèi)往上(向前偏移)第n行值
- lead() lead是用于統(tǒng)計(jì)窗口內(nèi)往下(向后偏移)第n行值
常用場(chǎng)景:
多用于解決用戶連續(xù)登錄問(wèn)題,如連續(xù)7天都登陸的用戶數(shù)
拓展:
偏移函數(shù)還有first_value()、last_value(),感興趣的同學(xué)可以自行學(xué)習(xí),本文不作介紹。
3、聚合函數(shù)
- sum()
- avg()
- count()
- max()
- min()
聚合函數(shù)在窗口函數(shù)中是針對(duì)自身記錄、以及自身記錄之上的所有數(shù)據(jù)進(jìn)行計(jì)算。
聚合函數(shù)作為窗口函數(shù),可以直觀的看到,截止到本行數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)是多少(最大值、最小值等);同時(shí)可以看出每一行數(shù)據(jù),對(duì)整體統(tǒng)計(jì)數(shù)據(jù)的影響。
三、代碼實(shí)操(經(jīng)典問(wèn)題)
本文代碼只展示基本框架,如遇同類問(wèn)題,直接代入使用即可
1、排序
topN問(wèn)題 (找出每個(gè)部門排名前N的員工)
select * from (select *, row_number() over (partition by 要分組的列名order by 要排序的列名 desc) as rankingfrom 表名) as a where ranking <= N2、偏移
user_name 用戶名(連續(xù)7天都登陸的用戶數(shù))
思路:
四、總結(jié)
本文主要介紹了窗口函數(shù)的基本概念以及幾種高頻窗口函數(shù)的用法,在實(shí)際工作中窗口函數(shù)是經(jīng)常用到的,可能乍一看不是很好理解,這是正常現(xiàn)象,多練習(xí)肯定沒(méi)問(wèn)題。
以上,如果覺(jué)得有點(diǎn)用,請(qǐng)記得點(diǎn)贊關(guān)注,謝謝!
總結(jié)
以上是生活随笔為你收集整理的plsql打开sql窗口快捷键_SQL干货|为你打开一扇窗—窗口函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [云炬创业基础笔记]第十一章创业计划书测
- 下一篇: [云炬创业基础笔记]第十一章创业计划书测