ORACLE - - 开窗函数

开窗函数在SQL查询中扮演重要角色,它允许对数据分组后进行复杂分析,如找到每个班级的最大年龄、年龄差和年龄总和,同时提供排序和序号功能,是GROUPBY的有力补充。通过PARTITIONBY和ORDERBY子句,可以实现更灵活的数据处理。
摘要由CSDN通过智能技术生成

开窗函数(又名:分析函数,窗口函数,OLAP函数):

   将数据按照一定的规则分组,统一分析各组的某项情况,每行数据返回一行结果。不论是spark的还是clickhouse的在日常的查询中是一个很常用的功能,特别是他想要解决的问题和group by的很类似,这两种容易引起混淆,本文就简单的描述下开窗函数的简单用法。

数据实例

SQL操作实例

1.查询每个班级中学生中年龄最大学生的基本信息。

-- 常用写法
    select * from T_Student wehre Age in (select max(Age) from T_Student Group by Class);
-- 改进写法
    select * from T_Student wehre Age in (select max(Age)  OVER(PARTITION BY  Class) from T_Student );

 2.查询每个班级中学生的最大年龄差。

--常用写法
select Class ,max(Age)-min(Age) 最大年龄差 from T_Student group by Class
--改进写法
select Class,max(Age) OVER(PARTITION BY Class)-min(Age) OVER(PARTITION BY Class) 最大年龄差 from T_Student 

3.查询时要求带出学生所在班级的学生年龄总和。

--常用方法
---------不想写-------
--改进写法
SELECT Name ,Age ,Class,SUM(Age) OVER(PARTITION BY Class) AS WEEKAMT FROM T_Student

4.查询时按照学生姓名排序并带上序号。

--常用写法
------小编不会--------
--改进写法
SELECT Name,ROW_NUMBER()OVER( ORDER BY Name) 序号 FROM T_Student 

5.查询时按照班级分组、学生姓名排序并带上序号。

--常用方法
----------望指点---------
--改进方法
SELECT B.Class,B.Name,ROW_NUMBER()OVER(PARTITION BY Class ORDER BY Name DESC) 序号 FROM T_Student B;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值