Postgresql窗口函數(二)

在上一篇里,主要窗口函數的基本用法。

在這一篇中,我們來看看postgresql除了聚合函數之外還支持哪些窗口函數吧。

row_number()

返回分組后的行號。注意到雖然emp_no為9和11的員工,salary相同,但row_number返回的行號仍然連續。

rank()

返回分組后的行號,但和row_number不同的是,如果對比值重復時,行號重復且會發生間斷。

dense_rank()

返回分組后的行號,但和row_number和rank函數都不同,當對比值重復時行號重復但不間斷。

percent_rank()

返回當前行的相對排名,計算在分組中的比例(rank-1)/(總記錄數-1),需要對比rank函數理解。

cume_dist()?

返回當前行的相對排名:(前面的行數或與當前行相同的行數)/(總行數)

ntile(分組數量)

讓所有記錄盡可以的均勻分布。

lag(value any [, offset integer [, default any ]])

返回偏移值,offset integer是偏移值,正數時前值,負數時后值,沒有取到值時用default代替,默認偏移量為0, 默認值為null

lead(value any [, offset integer [, default any ]])

返回偏移值,offset integer是偏移值,正數時取后值,負數時取前值,沒有取到值時用default代替

first_value(value any)

返回分組第一個值

last_value(value any)

返回分組最后一個值

nth_value(value any, nth integer)

返回分組的第n個值,如果沒有則為null

以上就是postgres支持的窗口函數,大家可以根據需要選擇使用,特別在寫復雜查詢時,選擇合適的窗口函數可以起到意想不到的效果。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容