mysql over()"/>
mysql over()
其实对于大部分学过同学来讲呢,sum() group by 算是老朋友了,作用就是利用sum()的聚合作用来统计具有某些共同特性的值的和,比如对于sum(考试分数) 来讲可以group by学号,班级,课程之类的。但是除此之外其实还有一个写法就是sum() over(partition),partiotion在英文单词中也有分类的意思,接下来先让我们建立一个表格:
### 创建表格
create table test(organization varchar(20),
ranking varchar(20),
number varchar(20));
### 插入数据
insert into test
values(1,1,1),(2,1,2),(3,1,3),(1,2,3),
(1,3,4),(2,3,6),(3,3,5),(1,2,3),
(2,2,5),(3,2,3),(2,2,5),(3,2,3);test表
我们先来看一下用sum() group by的话会返回什么样的结果,uhhhh,虽然大家心里可能都已经有b数了
select organization,sum(number) from test group by organization;大家好我是group by生的
再来看看用sum() over(partition)会返回什么样的结果
select organization,sum(number) over(partition by organization) as sum_num from test;大家好我是over(partition)生的
区别我就不讲了吧,如果看表格都看不出来,我建议你们去看眼科。
当然啦如果只讲到这里那这个帖子也有点太水了,下面我们就来拓展一下sum() over()另外一个拓展用法就是sum() over(partition...order by...),下面让我们看看这段查询代码:
select organization,ranking,number,sum(number) over(partition by organization order by ranking) as sum_num from test;大家好我是over(partition和order)一起生的
over(partition by)只是单纯的将同一个分类里的数值相加,但是如果后面跟上order by或者order by desc的话,前面的sum()值便会在同一个组内按照排名进行数值累加,百文不如一图
select organization,ranking,number,sum(number) over(partition by organization order by ranking) as sum_num from test;
配上代码这样看是不是会好很多哈哈哈哈,当然啦你们要是有什么补充或者不同意见也可以跟我说说,相互学习~
更多推荐
mysql over()
发布评论