SQL | 一道面试题

同学分享面试遇到的一个SQL题

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

参考

猜你喜欢

转载自blog.csdn.net/qq_27782503/article/details/92124439