HIVE-計算累計和


 

 

 

 

 

 

eg:統計1-12月的累積銷量,即1月為1月份的值,2月為1.2月份值的和,3月為123月份的和,12月為1-12月份值的和

SELECT   month,SUM(amount) month_amount,   SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_amount   FROM table_name   GROUP BY month   ORDER BY month;   

其中: SUM( SUM(amount)) 內部的SUM(amount)為需要累加的值,在上述可以換為 month_amount ORDER BY month 按月份對查詢讀取的記錄進行排序,就是窗口范圍內的排序

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 定義起點和終點,UNBOUNDED PRECEDING 為起點,表明從第一行開始, CURRENT ROW為默認值,就是這一句等價於:

ROWS UNBOUNDED PRECEDING

PRECEDING:在前 N 行的意思。

FOLLOWING:在后 N 行的意思。

計算前3個月之間的和

SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS cumulative_amount 

或者

SUM( SUM(amount)) OVER (ORDER BY month 3 PRECENDING) AS cumulative_amount  

前后一個月之間的和

SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS cumulative_amount 

統計7.23到7.26的累計和,實現結果為:

2018-07-23      10527150773     10527150773
2018-07-24      11799445150     22326595923
2018-07-25      11238537810     33565133733
2018-07-26      10917352755     44482486488
select datemion,sum(loan_amount),sum(sum(loan_amount)) OVER (ORDER BY datemion ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from( select datemion,strdeptcode,loan_amount,b.busiarea_code from a inner b on a.strdeptcode = b.dept_code where a.datemion between '2018-07-23' and '2018-07-26') a group by datemion 

​如果按照每個月內去累加,添加分區字段即可,表示按月分區,每個月內進行累加求和,從當月1號到月末:

select datemion,sum(loan_amount),sum(sum(loan_amount)) OVER (distribute by date_format(datemion,'yyyy-MM') sort BY datemion ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from( select datemion,strdeptcode,loan_amount,b.busiarea_code from app.app_total_busioverview_aggre a inner join dim.dim_department_v b on a.strdeptcode = b.dept_code where a.datemion between '2018-07-23' and '2018-09-26') a group by datemion order by datemion;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM