1 题目
题目:比如1 2 3 4 5 6 7 8 9 10…如果用SQL实现累加求和?最后结果为1 3 6 10 15…?
这么讲题目还是有点抽象,结合一个具体实例:
思路1
- 因为只有1张表,考虑表与表自身的联结
- 如何自身与自身联结呢?其实就是每次时间范围都要比之前的小 然后累加求和!
- 根据某一列进行分组!
select
date,
(
select
sum(pay)
from
test b
where
b.date <= a.date
) as pay
from
test a
group by
id
思路2
- 直接考虑两个表直接的比较!然后对于日期较少的表进行pay列的求和!
- 选择其余列的时候都选择时间大对应的列!
select
b.id,
b.date,
sum(a.pay)
from
test a,
test b
where
a.date <= b.date
group by
b.id;
2 拓展题目
- 思路和上述一致!
select
b.UserName,
b.Month,
b.Salary,
sum(a.Salary) Cumulation
from
User_Salary a,
User_Salary b
where
a.Month <= b.Month
group by
b.UserName,
b.Month,
b.Salary