- 开窗函数形式:聚合函数 over(选项)
- 开窗函数的作用:与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是普通聚合函数每组只能返回一个值,而开窗函数可以每组返回多个值。
- 例子:
比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000元的员工个数,执行下面的SQL语句
- 从上面例子可见,over()相当于over(partition by 1)表示开窗函数对所有结果集进行运算。 over关键字表示把函数当成开窗函数而不是聚合函数,SQL标准允许将所有聚合函数用做开窗函数,使用over关键字来区分这两种用法。
- 聚合函数 over(选项) 形式中 括号中的选项通常用来标识 开窗函数的开窗范围。如果 OVER 关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算。
- 例子:
1.建表
2.插入数据
3、查询每个人员的信息以及所在城市人数
发现开窗范围为FCity。
- 含有group by的开窗函数,一般在group聚合的基础上再次进行聚合。
例子:
以上表示在T.CHANNEL聚合sum的基础上再次在整个表的维度上进行sum聚合。
- 关于开窗范围(在over(选项) 选项中指定)
例子:下面以sum举例,其他函数同理(avg、min、max)
表中数据
sql语句
查询结果
- 一些常用的开窗函数组合
- over(partition by XX order by XX) partition by和order by 结合
例子:查询每个班的第一名。
得到的结果是:
说明:rank()和dense_rank()可以将所有的都查找出来,rank可以将并列第一名的都查找出来;rank()和dense_rank()区别:rank()是跳跃排序,有两个第二名时接下来就是第四名。
2.sum()over()的使用
例子:
根据班级进行分数求和
运行结果:
- first_value() over()和last_value() over()的使用
如求出第一个的成绩
4.其他聚合函数与over的搭配使用
count() over(partition by … order by …):求分组后的总数。
max() over(partition by … order by …):求分组后的最大值。
min() over(partition by … order by …):求分组后的最小值。
avg() over(partition by … order by …):求分组后的平均值。
lag() over(partition by … order by …):取出前n行数据。
lead() over(partition by … order by …):取出后n行数据。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/14928.html