SQL练习题一(逐行累计)

SQL练习题一(逐行累计)


表table1如下,ID为自增,查询出第一条开始到第几条记录的累计金额刚好超过100?

在这里插入图片描述

下面是创建表语句:

CREATE TABLE table1 (
ID INT,
金额 INT
)

INSERT INTO table1 VALUES (1,30);
INSERT INTO table1 VALUES (2,30);
INSERT INTO table1 VALUES (4,30);
INSERT INTO table1 VALUES (8,9);
INSERT INTO table1 VALUES (11,1);
INSERT INTO table1 VALUES (12,1);
INSERT INTO table1 VALUES (14,15);
INSERT INTO table1 VALUES (15,33);
INSERT INTO table1 VALUES (16,5);
INSERT INTO table1 VALUES (17,8);
INSERT INTO table1 VALUES (18,14);
INSERT INTO table1 VALUES (19,3);

我这里用的方法是先进行逐行累计,再进行对比找出目标ID

1.用表链接实现

select min(id) from 
(select 
a.id
,a.金额
,sum(b.金额) 累计金额
from table1 a,table1 b
where a.id>=b.id
group by a.id,a.金额 having sum(b.金额)>100
order by a.id) a

2.用开窗函数实现

select 
id
from 
(select 
id
,金额
,sum(金额) over(order by id) 累计金额
from table1
group by id,金额) a 
where 累计金额>100
order by id limit 1

总结:如果有别的方法的小伙伴,欢迎一起来分享一下!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值