当前位置:网站首页 > 技术博客 > 正文

开窗函数partition by



  • 开窗函数形式:聚合函数 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语句

 

查询结果

 
  • 一些常用的开窗函数组合
  1. over(partition by XX order by XX) partition by和order by 结合
    例子:查询每个班的第一名。
 

得到的结果是:

 

说明:rank()和dense_rank()可以将所有的都查找出来,rank可以将并列第一名的都查找出来;rank()和dense_rank()区别:rank()是跳跃排序,有两个第二名时接下来就是第四名。

2.sum()over()的使用
例子:
根据班级进行分数求和

 

运行结果:

 
  1. 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行数据。

  • 上一篇: c++常用容器类名
  • 下一篇: javatreemap优点
  • 版权声明


    相关文章:

  • c++常用容器类名2024-12-11 07:01:04
  • cglib和jdk动态代理底层实现原理2024-12-11 07:01:04
  • vmstat 命令2024-12-11 07:01:04
  • python如何打包交付2024-12-11 07:01:04
  • orm框架实现原理2024-12-11 07:01:04
  • javatreemap优点2024-12-11 07:01:04
  • 光束法区域网平差2024-12-11 07:01:04
  • 背包问题的动态规划算法c2024-12-11 07:01:04
  • modmanager使用方法2024-12-11 07:01:04
  • 操作系统作业题及答案2024-12-11 07:01:04