6_20240304开窗

news2024/10/7 14:30:37

目录

课堂

SQL执行顺序:

开窗函数

累加order by  

 开窗格式:

 排名

三种排名:

偏移  

上偏移

下偏移

同环比  

加子查询的几种方式

1 放在 select 后面

2 放在 from 后面 当表

​3 放在where 后

4 放在HAVING 后面

作业

1.Order_1显示出每年每个月的订单数,并显示出下一个月比上一个月相差的订单数

2.Order_1查询出每张订单的订单id,客户id,运费,和该客户的订单量

3.Order_1查询出每张订单的订单id,客户id,和这个客户的在各个城市的总运费

4.算连续3天或三天以上登录的人有哪些

 用排名解决:

用偏移解决: 

5.

(1)计算每个月社保记录,算出每个人在每家公司的 最早工作时间、最近工作时间

(2)计算出每个人的每一段工作履历(二次进宫多段列出)


课堂

SQL执行顺序:

1.from  2.where 3.group by 4.having 5.select 6.order by 

开窗函数

其实就是在明细后面加一列聚合

聚合:
sum()
avg()
max()
min()
count()


查询每个的工号,名字,工资,部门 及其所在部门的平均工资
001  zz 3000  10  2500
002  xx 2000  10  2500

select deptno,avg(sal) from emp group by deptno;

用到开窗                                       

                               group by 
select emp.*,avg(sal) over(partition by deptno) 部门平均工资 from  emp;


1.查询人员的 工号,姓名,工作,工资,及其对应职位的平均工资

select e.empno,e.ename,e.job,e.sal,avg(sal)over(partition by job) from emp e order by e.job;

2.查询人员的 工号,部门,姓名,整个公司的平均工资

select e.empno,e.deptno,e.ename,avg(sal)over() 公司平均工资 from emp e;

 

 3.查询人员的 工号,姓名,部门,职位,及其所在部门相同职位的工资合计
xx  10 manage 1000   3000
    10 manage 2000   3000

select  e.empno,e.ename,e.deptno,e.job,
        sum(sal)over(partition by deptno ,job) 同部门同职位的合计工资 
from emp e order by deptno,job;  

就是在明细加了 聚合 

 

4.查询出 比其所在部门平均工资高的员工的 工号,姓名,部门,工资,所在部门的平均工资

select  aa.* from 
(select emp.*,avg(sal)over(partition by deptno) 部门平均工资 from emp ) aa
where sal >部门平均工资;


累加order by  

1.开窗函数  分析函数

按入职时间排序,每个人员入职后,总共要发多少工资
001   1000   1000
002   1500   2500
003   1000   3500

select  e.*,sum(sal)over(order by hiredate) from emp e;

2.人员入职后,各个部门的平均工资的变化情况
10   1000   1000
10   2000   1500
20   2000   2000
20   1200   1600

按部门分组、按时间累加,求平均工资 

select  e.*,avg(sal)over(partition by deptno order by hiredate) from emp e;

3.按部门分组、按时间累加,求最高工资  

select e.*,max(sal) over(partition by deptno order by hiredate) from emp e;

4.按部门分组,求平工资  

select  e.*,max(sal)over(partition by deptno ) from emp e;  


 开窗格式:

聚合()over(partition by 分组 order by 排序) 


 排名

select aa.*,rownum from 
(select  emp.*,rownum from emp where deptno = 10 order by sal desc ) aa
where rownum <=3;


三种排名:

连续排名(row_number)、 

跳跃排名 (rank)、

连续不跳跃排名(dense_rank)

row_number    rank    dense_rank
90111
80222
70333
70433
60554

1.查询公司内的人员工资排名

select e.*,
       row_number()over(order by sal desc) 连续排名,
       rank()over(order by sal desc) 跳跃排名,
       dense_rank()over(order by sal desc) 连续不跳跃排名
 from emp e;

2.找出每个部门中工资排名第二的人员

select  * from 
(select e.*,
      row_number()over(partition by deptno order by sal desc) 连续,
      rank()over(partition by deptno order by sal desc) 跳跃 ,
      dense_rank()over(partition by deptno order by sal desc) 不跳
 from emp e )
 where 连续 = 2;

3.查询每个岗位最早入职的三人员

select  * from 
(select  e.*,row_number()over(partition by job order by hiredate ) 入职排名 from emp e )
where 入职排名 <=3


偏移  

需求
算出公司下一个入职的人员比上个入职 多多少钱?

上偏向上偏移lead(字段,偏移的行数,默认值)
下偏向下偏移lag(字段,偏移的行数,默认值)
     参数  
lead(字段,偏移几行,默认值) 
lag(字段,偏移几行,默认值) 

上偏移

select e.empno,e.ename,e.job,e.hiredate,e.deptno,e.sal,lead(sal,1,sal)over(order by hiredate ) 上偏,
       lead(sal ,1,sal) over(order by hiredate )-sal 下比上入职多
 from emp e where sal is  not null;


下偏移

select e.*,
      lag(sal ,1)over(order by hiredate) 下偏移,
      sal- lag(sal ,1)over(order by hiredate)连续性
 from emp e;

当连续性相同时,可证明三天活跃7天连续 

1.查询公司职位的平均工资从多到少相差多少钱?

select aa.*,lag(职位平均,1)over(order by 职位平均 desc),
      lag(职位平均,1)over(order by 职位平均 desc)-职位平均 多比少多出
 from 
(select  job,avg(sal) 职位平均 from emp group by job) aa;

2.求相同职位的平均工资

select job,职位平均工资 from
(select  job,avg(sal) over(partition by job)  职位平均工资 from emp e )
group by job,职位平均工资

select e.*,avg(sal)over(partition by deptno) from emp  e

select  e.*,avg(sal) over(partition by job)  职位平均工资 from emp e;

 


同环比  

同比这一期比去年同期 
环比这一期比上一期

南宁市的24年2月份的房价    8000
        23年2月           9000
        24年1月           7000

 1.南宁市24年2月房价同比增长:select  trunc((8000-9000)/9000*100,4)||'%'   from dual; 
                                        (新-旧)/旧  

 2.南宁市24年2月房价环比增长:select trunc((8000-7000)/7000*100,4)||'%'  from dual;
                                        (新-旧)/旧  


加子查询的几种方式

1 放在 select 后面

select  * from  (子查询)

查询出emp人员信息及其对应的部门名称 
select  e.*,(select dname from dept d where d.deptno =e.deptno) 部门名称  from emp e;

2 放在 from 后面 当表

   还有一种当表来查的写法
   with as
   比如说
   查询出比其所在部门平均工资高的人员

   with aa as(
   select e.*,avg(sal)over(partition by job ) 平均工资  from emp e)
   select  * from aa where  sal>平均工资


  
3 放在where 后

查询比 7369 工资高的人员信息

 select * from emp where  sal > (select  sal from emp where empno=7369);

 还有一种  单行多列
 查询和7788同部门同职位的人员

 select  * from emp where (deptno,job)=( select deptno,job from emp e where e.empno = 7788);

4 放在HAVING 后面

查询出比20号部门的人多的部门

 select  deptno,count(1) from emp group by deptno having count(1)>(  select count(1)  from emp where  deptno = 20);

作业

1.Order_1显示出每年每个月的订单数,并显示出下一个月比上一个月相差的订单数

select aa.* ,
       lag(月订量,1)over(order by 日期)下偏移,
       月订量-lag(月订量,1)over(order by 日期) 下个月比上个月多
from
(select TO_CHAR(订购日期, 'yyyy-MM') 日期,count(订购日期)月订量 
from Order_1 group by TO_CHAR(订购日期, 'yyyy-MM'))aa

2.Order_1查询出每张订单的订单id,客户id,运费,和该客户的订单量

select 订单id,运货费,客户id,count(1)over(partition by 客户id)客户的订单量 from Order_1
select 客户id,count(1) from Order_1 group by 客户id

3.Order_1查询出每张订单的订单id,客户id,和这个客户的在各个城市的总运费

select 订单id,客户id,货主城市,
       sum(运货费)over(partition by 客户id,货主城市) 客户的在各个城市的总运费 
from Order_1

4.算连续3天或三天以上登录的人有哪些

建表

create table login_a
(
login_date date,
id         varchar2(2)
);

insert into login_a (LOGIN_DATE, ID)
values (to_date('03-01-2022', 'dd-mm-yyyy'), 'a');

insert into login_a (LOGIN_DATE, ID)
values (to_date('02-01-2022', 'dd-mm-yyyy'), 'a');

insert into login_a (LOGIN_DATE, ID)
values (to_date('01-01-2022', 'dd-mm-yyyy'), 'a');

insert into login_a (LOGIN_DATE, ID)
values (to_date('04-01-2022', 'dd-mm-yyyy'), 'b');

insert into login_a (LOGIN_DATE, ID)
values (to_date('05-01-2022', 'dd-mm-yyyy'), 'c');

insert into login_a (LOGIN_DATE, ID)
values (to_date('06-01-2022', 'dd-mm-yyyy'), 'a');

insert into login_a (LOGIN_DATE, ID)
values (to_date('07-01-2022', 'dd-mm-yyyy'), 'b');

insert into login_a (LOGIN_DATE, ID)
values (to_date('08-01-2022', 'dd-mm-yyyy'), 'b');

insert into login_a (LOGIN_DATE, ID)
values (to_date('09-01-2022', 'dd-mm-yyyy'), 'b');

insert into login_a (LOGIN_DATE, ID)
values (to_date('10-01-2022', 'dd-mm-yyyy'), 'c');

insert into login_a (LOGIN_DATE, ID)
values (to_date('11-01-2022', 'dd-mm-yyyy'), 'c');
Commit;

select * from login_a

 用排名解决:

select aa.id, aa.连续, count(1)
  from (select a.*,
               row_number() over(partition by id order by a.login_date desc) 排名,
               a.login_date + row_number() over(partition by id order by a.login_date desc) 连续
          from login_a a) aa
 group by aa.id, aa.连续
having count(1) >= 3

用偏移解决: 

select b.用户id
  from (select a.id 用户id,
               a.login_date 登陆日期,
               lag(login_date, 1, login_date) over(partition by id order by login_date) 偏移量
          from login_a a) b
 where b.登陆日期 - b.偏移量 <= 1
group by 用户id
having count(*) >= 3

5.

建表

create table 社保缴纳记录
(
  证件号码 VARCHAR2(30),
  姓名   VARCHAR2(20),
  企业名称 VARCHAR2(100),
  信用代码 VARCHAR2(30),
  缴纳年月 DATE
)

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '阿里', 'al001', to_date('01-01-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '阿里', 'al001', to_date('01-02-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '阿里', 'al001', to_date('01-03-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '海康', 'hk001', to_date('01-04-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '海康', 'hk001', to_date('01-05-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '海康', 'hk001', to_date('01-06-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '阿里', 'al001', to_date('01-07-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs001', '张三', '阿里', 'al001', to_date('01-08-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '网易', 'wy001', to_date('01-03-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '网易', 'wy001', to_date('01-02-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '网易', 'wy001', to_date('01-01-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '网易', 'wy001', to_date('01-04-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '大华', 'dh001', to_date('01-05-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '网易', 'wy001', to_date('01-06-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '阿里', 'al001', to_date('01-08-2023', 'dd-mm-yyyy'));

insert into 社保缴纳记录 (证件号码, 姓名, 企业名称, 信用代码, 缴纳年月)
values ('zs002', '周芷若', '阿里', 'al001', to_date('01-07-2023', 'dd-mm-yyyy'));

Commit;

select * from 社保缴纳记录


(1)计算每个月社保记录,算出每个人在每家公司的 最早工作时间、最近工作时间

select distinct 证件号码,
                企业名称,
                min(缴纳年月) over(partition by 证件号码, 企业名称 ) 最早工作时间,
                max(缴纳年月) over(partition by 证件号码, 企业名称 ) 最近工作时间
  from 社保缴纳记录

(2)计算出每个人的每一段工作履历(二次进宫多段列出)

select distinct 连续,a.证件号码,a.姓名,a.信用代码,a.企业名称,
       min(缴纳年月)over(partition by 姓名,企业名称,连续)kssj,
       max(缴纳年月)over(partition by 姓名,企业名称,连续)jssj
from(select s.*,
       row_number()over(partition by 姓名,企业名称 order by 缴纳年月 desc)排名,
       to_char(缴纳年月,'MM')+row_number()over(partition by 姓名,企业名称 order by 缴纳年月 desc) 连续
from 社保缴纳记录 s)a
order by 姓名,kssj

子表 

最终结果 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity在UGUI上通过绘制网格顶点自由画线

该插件的实现是使用UI组件的绘图API来动态生成和修改几何形状&#xff0c;可自由动态更改画线的粗细、拐角圆滑度、颜色&#xff0c;自由增减节点&#xff0c;不额外增加gameobject&#xff0c;并且在原生的UGUI上以ScreenSpace-Overlay的状态下&#xff0c;显示效果如下所示 …

rust引用本地crate

我们可以动态引用crate&#xff0c;build时从crate.io下载&#xff0c;但可能因无法下载导致build失败。首次正常引用三方crate&#xff0c;build时自动下载的crate源码&#xff0c;我们将其拷贝到固定目录中&#xff1b; build后可在RustRover中按住Ctrl键&#xff0c;在crat…

Python的网络爬虫介绍与实战

Python的网络爬虫基础介绍与实战 定义流程包和函数静动态网页爬虫实战红牛分公司&#xff1f;二手房数据&#xff08;静态网页&#xff09;豆瓣读书&#xff08;动态网页&#xff09; 定义 网络爬虫是按照一定的规则&#xff0c;自动地抓取万维网&#xff08;www&#xff09;信…

【Kubernetes】k8s删除master节点后重新加入集群

目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上&#xff0c;创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群&#xff0c;检查业务…

用尾插的思想实现移除链表中的元素

目录 一、介绍尾插 1.链表为空 2.链表不为空 二、题目介绍 三、思路 四、代码 五、代码解析 1. 2. 3. 4. 5. 6. 六、注意点 1. 2. 一、介绍尾插 整体思路为 1.链表为空 void SLPushBack(SLTNode** pphead, SLTDataType x) {SLTNode* newnode BuyLTNode(x); …

[大模型]ollama本地部署自然语言大模型

文章目录 ollama下载地址githup百度云 模型默认安装位置模型修改默认安装位置可下载模型相关命令 Chatbox客户端下载地址githup百度云 设置ollama模型并运行 大模型已经发布很久&#xff0c;网络上的大模型形形色色&#xff0c;现在已然是群英荟萃&#xff0c;那么&#xff0c;…

2.vscode 配置python开发环境

vscode用着习惯了,也不想再装别的ide 1.安装vscode 这一步默认已完成 2.安装插件 搜索插件安装 3.选择调试器 Ctrl Shift P&#xff08;或F1&#xff09;&#xff0c;在打开的输入框中输入 Python: Select Interpreter 搜索&#xff0c;选择 Python 解析器 选择自己安…

AI基础知识(2)--决策树,神经网络

1.什么是决策树&#xff1f; 决策树是一类常见的机器学习方法&#xff0c;决策树是基于树的结构来进行决策。决策过程中提出的每一个问题都是对于属性的“测试”&#xff0c;决策的最终结论对应了我们希望的判定结果。一个决策树包含一个根节点&#xff0c;若干个内部节点和若…

实时云渲染及云交互技术的关系

一、实时云渲染和云交互技术 实时云渲染是一种新兴的技术&#xff0c;它可以将用户的计算机上的数据通过云服务器进行渲染&#xff0c;从而实现实时渲染的效果&#xff0c;实时渲染可以在加速渲染速度的同时&#xff0c;实现更高质量的渲染效果、减轻用户的计算机负担、全方位…

【go语言开发】性能分析工具pprof使用

本文主要介绍如何在项目中使用pprof工具。首先简要介绍pprof工具的作用&#xff1b;然后介绍pprof的应用场景&#xff0c;主要分为工具型应用和服务型应用。最后数据分析项目&#xff0c;先采集项目信息&#xff0c;再可视化查看 文章目录 前言应用场景工具型应用服务型应用 数…

22 OpenCV 直方图计算

文章目录 直方图概念split 通道分离函数calcHist 计算直方图normalize 归一化函数示例 直方图概念 上述直方图概念是基于图像像素值&#xff0c;其实对图像梯度、每个像素的角度、等一切图像的属性值&#xff0c;我们都可以建立直方图。这个才是直方图的概念真正意义&#xff0…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第六:trans_nullmodel class

近几十年来&#xff0c;系统发育分析和零模型的整合通过增加系统发育维度&#xff0c;更有力地促进了生态位和中性影响对群落聚集的推断。trans_nullmodel类提供了一个封装&#xff0c;包括系统发育信号、beta平均成对系统发育距离(betaMPD)、beta平均最近分类单元距离(betaMNT…

时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较

最近时间序列预测预测领域的最新进展受到了各个领域&#xff08;包括文本、图像和语音&#xff09;成功开发基础模型的影响&#xff0c;例如文本&#xff08;如ChatGPT&#xff09;、文本到图像&#xff08;如Midjourney&#xff09;和文本到语音&#xff08;如Eleven Labs&…

【GPT-SOVITS-06】特征工程-HuBert原理

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

从0开始写一个问卷调查APP的第11天

1.今日任务 分析:上次我们实现了从数据库中成功的查找到对应问卷的问题并在前端展示出来&#xff0c;那么今天我们增加难度。在数据库中插入多项选择问题&#xff0c;在接口中查找到并在前端显示出来。 2.实现 2.1数据库中插入测试数据 我们先查看一下表的结构 2.2接口实现…

软件架构设计 C/S与B/S架构的区别

一、什么是C/S架构&#xff1f; C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机&#xff0c;并采用大型数据库系统&#xff0c;如Oracle或SQLServer。 C/S架构软件有一个特点&#xff0c;就是如果用户要使用的话&#xff0c;需要下载一个客户端&#x…

nodejs部署

字符集转换&#xff1a; mysql报错&#xff1a;Incorrect string value: \xF0\x9F... for column XXX at row 1_incorrect string value: \\xf0\\x9f\\x94\\xa5\\xe8-CSDN博客 查看nginx是否启动 ps -ef|grep nginx 检查nginx是否配置正确 nginx -t 防火墙开启端口 启动并…

CCDP.01.使用NotePad++辅助部署OpenStack的说明

前言 对于象OpenStack&#xff08;OS&#xff09;这样的复杂分布式系统&#xff08;云计算平台&#xff09;&#xff0c;一次部署通过是需要相当的Linux基础、网络基础、分布式系统基础、云计算基础的。这里类比在开发大型复杂系统常常采用的“防御式编程”方法论&#xff0c;探…

Vue中使用Lodash

Vue中使用Lodash 前言安装Lodash引用方法vue中使用1、cloneDeep 深拷贝2、uniq 数组去重3、uniqWith 数组对象去重 isEqual 深度比对4、intersection 提取数组相同元素5、chunk 数组切分6、compact去除假值7、reject:根据条件删除指定的值8、find:查找结果的第一个值9、filter:…

Machine Learning ---- Multiple linear regression equation

一、Multiple linear regression: In the study of real-world problems, the changes in the dependent variable are often influenced by several important factors. In this case, it is necessary to use two or more influencing factors as independent variables to e…