累计求和三种算法

累计求和在面试和实际开发中应用比较多,是一种必须掌握的算法,下面就给大家介绍一下累计求和的基本算法。

算法一:

Teradata数据库自带一种算累计求和的函数:CSUM()函数

CSUM(求和字段,排序字段)

SELECT NAME

             ,DATE_MON

             ,SALARY

             ,CSUM(salary,date_mon) AS SUMSAL

FROM TABLE_A

GROUP BY NAME

table_a      
name date_mon salary sumsal
jack 201901 100 100
jack 201902 120 220
jack 201903 150 370
jack 201904 80 450
jack 201905 200 650

算法二(mysql 没有该种用法):

SELECT NAME,DATE_MON,SALARY,SUM(SALARY) OVER(PARTITION BY NAME ORDER BY DATE_MON ASC) AS SUMSAL  FROM TABLE_A

算法三(mysql 没有该种用法,mysql中TMP可以单独创建):

WITH TMP AS (SELECT NAME,DATE_MON,SALARY,ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY DATE_MON ASC) AS RN

FROM TABLE_A)

SELECT A.NAME,A.DATE_MON,A.SALARY,SUM(B.SALARY)

FROM TMP A

LEFT JOIN TMP B

ON A.NAME = B.NAME

AND A.RN <= B.RN

GROUP BY A.NAME,A.DATE_MON,A.SALARY

 

你可能感兴趣的:(累计求和三种算法)