【gp數據庫】統計常用窗口函數詳解

1.按照網別計算近三月累計/平均繳費人數


select net_type 網別
,pay_date_first_zy 繳費時間
,count(1) 人數 
,sum(count(1)) over(PARTITION BY net_type ORDER BY pay_date_first_zy 
										ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 近三月累計繳費人數
,round(avg(count(1)) over(PARTITION BY net_type ORDER BY pay_date_first_zy   
										ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),1) 近三月平均繳費人數
FROM anrpt.rpt_label_info
GROUP BY net_type,pay_date_first_zy
ORDER BY net_type,pay_date_first_zy

結果如下:
可見當觀察賬期爲201910時,201910沒有上月值,所以用201910人數+201911人數=累計繳費人數,3+1 = 4。
當觀察賬期爲201911時,用201910+201911+201911人數=累計繳費人數,3+1+3 = 7。
在這裏插入圖片描述

2.流量溢出情況人數佔比

select gprs_more_type 流量溢出頻率
,row_number() over(order by count(1) DESC) 人數排名 
,count(1) 人數
,sum(count(1)) over(ORDER BY count(1) ROWS BETWEEN unbounded preceding AND current row) sum1 -- 指第一行至當前行的彙總
,sum(count(1)) over(ORDER BY count(1) ROWS BETWEEN current row AND unbounded following) sum2 -- 指當前行到最後一行的彙總
,sum(count(1)) over(ORDER BY count(1) ROWS BETWEEN 1 preceding AND current row) sum3 -- 指當前行的上一行(rownum-1)到當前行的彙總
,sum(count(1)) over(ORDER BY count(1) ROWS BETWEEN 1 preceding AND 1 following) sum4 -- 指當前行的上一行(rownum-1)到當前行的下輛行(rownum+2)的彙總
,sum(count(1)) over(order by count(1) rows between unbounded preceding and unbounded following) sum5 -- 每行對應的數據窗口是從第一行到最後一行
FROM anrpt.rpt_label_info
GROUP BY gprs_more_type 
ORDER BY 人數排名 desc

結果如下:
求人數佔比直接用人數/sum5就可以了。
這裏列出了多種分組求和方式,當然如果維度多個可以在over裏面加PARTITION BY,除了求和也可以用max、min等其他聚合函數。
在這裏插入圖片描述
上一篇:【gp數據庫】你可能不知道卻超級實用的函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章