前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库sum() over() 详解

数据库sum() over() 详解

作者头像
灬沙师弟
发布2024-07-12 12:36:40
1050
发布2024-07-12 12:36:40
举报
文章被收录于专栏:Java面试教程

前言

开窗函数很重要,一定要好好学,能够解决不少场景下的需求。

这是举例子的一张表

id

score

class

year

1

20

1

2024

2

40

1

2024

3

50

2

2024

4

10

2

2024

5

70

3

2024

正文

如上述表格。

select class, score, sum(score) over() as sum from table

score

class

sum

20

1

180

40

1

180

50

2

180

10

2

180

70

3

180

这是做了一个总体的汇总。

select class, score, sum(score) over(partipion by class) as sum from table

score

class

sum

20

1

60

40

1

60

50

2

60

10

2

60

70

3

70

这是根据cclass,做了一个分区,进行了一个汇总。

你会发现,没有orderby的话 永远都是汇总,是不会去做累加的。

select class, score, sum(score) over(partipion by class order by id) as sum from table

这个的意思是根据class 分组,在根据id进行排序,进行做累加。

score

class

sum

20

1

20

40

1

60

50

2

50

10

2

60

70

3

70

这边给大家介绍一个 关于sum() over() 非常好用的一个实际应用场景。

name

amount

monthstr

a

100

202401

a

200

202402

a

100

202403

a

400

202404

需求,我要求a这个人每个月的累计值,也就是说202404 的累计值 是要把202401 到 202404的所有值都加起来

select name ,amount ,monthstr, sum(amount) over(order by monthstr) as sumamount from table

name

amount

monthstr‍‍

sumamount

a

100

202401

100

a

200

202402

300

a

100

202403

400

a

400

202404

800

讲到这sum() over() 你应该是了解了吧,

只要是遇到 需要分区做汇总,或者是要做逐级累加的,就需要这个开窗函数来帮你。

不过对于数据库的版本需要注意下,像mysql,8以上是支持的,5就不支持拉了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档