sql分组,排序等一些函数的用法

今天项目的两个地图数据有问题,经检查是由于数据重复造成的,需要去重,解决问题后把使用的相关函数汇总一下

 

 

 

group by是分组函数,partition by是分区函数(像sum()等是聚合函数),注意区分。

 

用法: OVER(PARTITION BY… ORDER BY…)

 

比如例子中的,我创建了八条数据,其中四个人是一班,另外四个是二班,partition by s.class 就是对班级进行分区,order by 对成绩进行降序排序,最后观察查出来的rn

 

 

row_number() 顺序排序

 

 

 

上图中一班成绩为90,85,85,80,在成绩相同的情况下,先查出来的数据排名优先,所以排名是1,2,3,4

 

rank() 跳跃排序,如果有两个第一级别时,接下来是第三级别

 

 

 

rank()在成绩相同的情况下,会把数据并列,就像表里的两个85分是并列第二,80分则到了第四,所以是1,2,2,4

 

dense_rank() 连续排序,如果有两个第一级别时,接下来是第二级别

 

 

 

与rank不同的是,数据相同的情况下,相同的数据并列后,下一个数据的排名会直接跟在后面而不是把重复的数据排名空出来,所以是1,2,2,3

 

NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的’分区’一样 ,分为几个区,一个区会有多少个。

 

 

这里查询了3次,第一次分为1个’区’ ,所以查询结果rn全是1,第二次分为2个区,查询结果为 1 1 2 2,意思就是 第一个 ‘区’ 为 1 1 两个编号的数据 ,第二个’区’为 2 2 两个编号的数据,第三次分为三个区,第一个 ‘区’ 为 1 1 两个编号的数据,第二个’区’只有2这个数据,第三个’区’只有3这个数据

 

关于Partition by:

Partition by关键字是Oracle中分析性函数的一部分,用于给结果集进行分区。它和聚合函数Group by不同的地方在于它只是将原始数据进行名次排列,能够返回一个分组中的多条记录(记录数不变),而Group by是对原始数据进行聚合统计,一般只有一条反映统计值的结果(每组返回一条)。

 

 

 

我们在末尾加一个group by 他会把相同数据分组后合并成一条了,但是partition却能返回一组中的多条数据

 

posted @ 2022-12-07 15:24  我爱编程到完  阅读(102)  评论(0编辑  收藏  举报