SQL查询按年、月累计求和


先有如下表格


C为主键

想查询出每年每月的累计交易额

SELECT 
    年,
    月,
    交易额,
    (SELECT 
            SUM(交易额)
        FROM
            test1 AS a
        WHERE
            b.c >= a.c AND a.月 = b.月
                AND a.年 = b.年) AS 交易累计金额,
    c
FROM
    test1 AS b


查出如下结果:



在红框内的条件,可理解为同时以年为单位,不同年份就要重新计算,并以月为单位计算,不同月就要重新累计求和。

如果去掉年份相等条件,则会把所有相等月的交易额累计计算。

如果去掉月份相等条件,则会把所有相等年的交易额累计计算。


如果想不以年月为单位计算求和,而是简单的累计求和,去掉年月相等条件即可。


本文中的年月可替代为任意其他维度,比如不同分公司的不同部门,查询每个分公司每个部门的交易累计额。

当然也可以直接groupby,不过如果要求查询出每个部门的交易时间及累计金额变化趋势,直接group by会少了时间的列?

另外,我在网上查阅到有人用sum()的方法效率较低,如果数据量大了,会很慢。

本人sql新手···

欢迎大神来讨论···· 


最后有个问题没弄明白,b.c>=a.c 这个条件有什么作用?

阅读更多

更多精彩内容