在上一篇里劫灶,主要窗口函數(shù)的基本用法霞丧。
在這一篇中劲妙,我們來看看postgresql除了聚合函數(shù)之外還支持哪些窗口函數(shù)吧湃鹊。
row_number()
返回分組后的行號(hào)。注意到雖然emp_no為9和11的員工镣奋,salary相同币呵,但row_number返回的行號(hào)仍然連續(xù)。
rank()
返回分組后的行號(hào)侨颈,但和row_number不同的是余赢,如果對(duì)比值重復(fù)時(shí),行號(hào)重復(fù)且會(huì)發(fā)生間斷哈垢。
dense_rank()
返回分組后的行號(hào)妻柒,但和row_number和rank函數(shù)都不同,當(dāng)對(duì)比值重復(fù)時(shí)行號(hào)重復(fù)但不間斷耘分。
percent_rank()
返回當(dāng)前行的相對(duì)排名举塔,計(jì)算在分組中的比例(rank-1)/(總記錄數(shù)-1)绑警,需要對(duì)比rank函數(shù)理解。
cume_dist()?
返回當(dāng)前行的相對(duì)排名:(前面的行數(shù)或與當(dāng)前行相同的行數(shù))/(總行數(shù))
ntile(分組數(shù)量)
讓所有記錄盡可以的均勻分布央渣。
lag(value any [, offset integer [, default any ]])
返回偏移值计盒,offset integer是偏移值,正數(shù)時(shí)前值芽丹,負(fù)數(shù)時(shí)后值北启,沒有取到值時(shí)用default代替,默認(rèn)偏移量為0志衍, 默認(rèn)值為null
lead(value any [, offset integer [, default any ]])
返回偏移值暖庄,offset integer是偏移值聊替,正數(shù)時(shí)取后值楼肪,負(fù)數(shù)時(shí)取前值,沒有取到值時(shí)用default代替
first_value(value any)
返回分組第一個(gè)值
last_value(value any)
返回分組最后一個(gè)值
nth_value(value any, nth integer)
返回分組的第n個(gè)值惹悄,如果沒有則為null
以上就是postgres支持的窗口函數(shù)春叫,大家可以根據(jù)需要選擇使用,特別在寫復(fù)雜查詢時(shí)泣港,選擇合適的窗口函數(shù)可以起到意想不到的效果暂殖。