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却能返回一组中的多条数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端