背景
刷leetcode数据库题的时候,发现自己是真的菜
不管是知识面还是逻辑思路太僵硬了,脑袋没有开窍
真的是一杯茶一支烟一句SQL看一天
还是要不断的学习吧,今天总结一下常用分析函数的用法
首先分析一下over(partition by a order by b)这个函数
OVER(PARTITION BY Year ORDER BY Month DESC )
数据会根据Year字段进行分组,按照Month字段降序排列
效果图:
常用的分析函数很多很多:
1.row_number() over(partition by … order by …)
2.rank() over(partition by … order by …)
3.dense_rank() over(partition by … order by …)
4.count() over(partition by … order by …) 分组后的总数
5.max() over(partition by … order by …) 分组后的最大值
6.min() over(partition by … order by …) 分组后的最小值
7.sum() over(partition by … order by …) 分组后的求和
8.avg() over(partition by … order by …) 分组后平均值
9.first_value() over(partition by … order by …) 分组后第一个值
10.last_value() over(partition by … order by …) 分组后第二个值
11.lag() over(partition by … order by …) 取出前N行的数据
12.lead() over(partition by … order by …) 取出后N行的数据
在over前还加一个分析函数row_number()
效果图:
在over函数执行的基础上,还会根据Month进行不重复排序
Rank()和Dense_rank()区别
Rank()输出:
Dense_rank()输出:
可以看到rank()排序在相同参数保持一致排序后,后面元素还是保持原本排序
dense_rank()到后面的元素是跟随排序
Sum() over()
sum(score) over(partition by class_id order by score desc)
根据班级ID进行分组,成绩降序排列,再将成绩依次递增
效果图
还有一些函数,以后用到了在展示
学无止境,瑞思拜