当前位置: 首页 > news >正文

oracle开窗函数笔记、over()笔记

文章目录

      • 开窗函数、组函数、分析函数概念
        • 聚合函数和分析函数的区别
        • partition by后面也可以跟多个字段
      • 开窗函数一定要加 聚合函数、或分析函数吗,否则会报错
      • lag()和lead()的用法
        • lag和lead实战
        • 开窗函数可以和其他函数一起使用吗? TODO
        • 开窗函数中的count(1)是什么意思
        • pivot行列转换函数 TODO
        • unpivot函数 TODO
        • group_conat
        • cross apply
        • mode的用法(也可能不是组函数等,放在这里不太合适?)
    • 其他
      • 这一篇博客不错

开窗函数算是中阶sql了(相对于初级sql来说)。

之前一直不太了解,接触过几次觉得有点难,就一直没用起来,随着业务的发展,不会开窗函数确实太受瘪。

开窗函数、组函数、分析函数概念

他们之间的包含关系是:

分析函数>窗口函数>组函数。

开窗函数的理解:
相当于先分组,然后再组内统计,这样就好理解了。

聚合函数和分析函数的区别
聚合函数分析函数
聚合函数是汇总计算返回一个计算结果分析函数会根据表的行数,每行返回一个计算结果。
聚合函数使用的时候有很多语法限制分析函数几乎没有限制
聚合函数分组使用 GROUP BY ,会对分组字段去重分析函数分组使用 PARTITION BY ,PARTITION BY 没有去重的功能。
聚合函数可以直接放在SQL中当条件使用,比如在 HAVING 后面可以直接用 聚合函数当条件分析函数不可以直接当条件,必须对分析函数的查询结果 使用子查询套一下 再进行过滤, 否则会报语法错误。
ORDER BY 在聚合函数中是对查询结果排序在分析函数中有2个作用 排序 和 累计计算
在使用分组 聚合后 ORDER BY 后面只能跟 分组字段 或者 聚合函数分析函数中 没有这种限制
partition by后面也可以跟多个字段

开窗函数一定要加 聚合函数、或分析函数吗,否则会报错

ORA-00923: 未找到要求的 FROM 关键字

lag()和lead()的用法

lag # 找前一条记录(这两个千万别弄串了)
lead # 找下一条记录

lag和lead实战

建表及造数:

CREATE TABLE T_SALARY(	ID VARCHAR2(100),USER_NAME VARCHAR2(100),PERIOD VARCHAR2(100),AMOUNT NUMBER(20,2),CONSTRAINT T_SALARY_PK PRIMARY KEY (ID));
INSERT INTO T_SALARY (ID,USER_NAME,PERIOD,AMOUNT) VALUES ('1','zhangsan','2024-01',90);
INSERT INTO T_SALARY (ID,USER_NAME,PERIOD,AMOUNT) VALUES ('2','zhangsan','2024-02',95);
INSERT INTO T_SALARY (ID,USER_NAME,PERIOD,AMOUNT) VALUES ('3','zhangsan','2024-03',96);

查询:

环比:
SELECT
period,amount,
amount / LAG(amount) OVER (ORDER BY period) AS cycleDiff
FROM
T_SALARY;错误语句:
SELECT
period,amount,LEAD(amount)/amount OVER (ORDER BY period) AS cycleDiff
FROM
T_SALARY;
报错:
ORA-30484: 丢失的此函数窗口说明
注:这种写法报错,感觉是开窗函数前应该是要有分析函数(例如组函数)
开窗函数可以和其他函数一起使用吗? TODO
开窗函数中的count(1)是什么意思

当count() over()带有 order by 的时候,分组计的都是到当前order by值的数量,不同于排序函数,但可在特殊情况下使用此特性。

pivot行列转换函数 TODO
unpivot函数 TODO
group_conat
cross apply
mode的用法(也可能不是组函数等,放在这里不太合适?)

其他

这一篇博客不错

https://www.cnblogs.com/xulinforDB/p/17496452.html

http://www.lryc.cn/news/505707.html

相关文章:

  • 【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装
  • 海外招聘丨卢森堡大学—人工智能和机器学习中的 PI 用于图像分析
  • LeetCode hot100-85
  • linux 内核数据包处理中的一些坑和建议
  • C++ 的衰退复制(decay-copy)
  • vue-cli 5接入模块联邦 module federation
  • 【Rust自学】3.6. 控制流:循环
  • 【第八节】git与github
  • win如何访问Linux数据库(本地)
  • Windows设置所有软件默认以管理员身份运行
  • 前端 计算发布时间(如“1小时前”、“3天前”等)
  • shardingjdbc 4.0.0 seata分布式事务Failed to fetch schema问题
  • 罗德与施瓦茨NRT2功率反射仪,NRT2通过式功率计
  • QLineEdit限制输入固定字节数(UTF-8编码)
  • 基于ubuntu的mysql 8.0安装教程
  • K8s ConfigMap的基础功能介绍
  • Linux——Shell
  • armsom产品编译烧录Linux固件
  • VSCode:Markdown插件安装使用 -- 最简洁的VSCode中Markdown插件安装使用
  • AI 行业发展趋势:科技创新引领未来变革
  • FB爆款打法实操经验总结
  • 微信小程序TTS解决方案
  • centos stream 8下载安装遇到的坑
  • 计算机网络——期末复习(1)背诵
  • AORO M6 Pro单北斗防爆终端全面国产化,关键技术不再“卡脖子”
  • ubuntu 卸载 MySQL
  • 6、基于SpringBoot的网上购物系统
  • AMS1117芯片驱动电路·降压芯片的驱动电路详解
  • 数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)
  • SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期