Oracle分析查询

 

 --1. 窗口函数(累加、移动平均) 

 

    --基本语法:

    FUNCTION_NAME(ARGUMENT_LIST)

    OVER(<PARTITION_CLAUSE> <ORDER_BY_CLAUSE> <WINDOWING_CLAUSE>)

    (1)FUNCTION_NAME:窗口函数名称,如 SUM()、AVG()、MAX()、MIN()、COUNT()、VARIANCE()、FIRST_VALUE()、LAST_VALUE()等

    (2)ARGUMENT_LIST:参数列表

    (3)PARTITION_CLAUSE:可选的分区子句

    (4)ORDER_BY_CLAUSE:可选的排序子句

    (5)WINDOWING_CLAUSE:用于定义变化的或者固定的数据窗口,常用 ROWS ROW_EXPRESSION

       a:UNBOUNDED PRECEDING -> 表示该窗口从当前分区的第一行开始,并且结束于正在处理的当前行

       b:CURRENT ROW -> 表示窗口从当前行开始和结束

       c:NUMERIC_EXPRESSION PRECEDING -> 表示该窗口从当前行之前的数字表达式 NUMERIC_EXPRESSION 指定的行开始

       d:NUMERIC_EXPRESSION FOLLOWING -> 表示该窗口从当前行之后的数字表达式 NUMERIC_EXPRESSION 指定的行结束

       e:BETWEEN ... AND ... -> 表示窗口的范围

 

  --eg:(累加、移动平均) 

     SELECT DEPTNO,

           SUM(SAL)SUMSAL,           

           SUM(SUM(SAL)) 

             OVER(ORDER BY DEPTNO ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

             AS CUMMULATIVE_SAL,--累加

           AVG(SUM(SAL)) 

             OVER(ORDER BY DEPTNO ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) 

             AS MOVING_2_AVGSAL, --移动平均

           AVG(SUM(SAL)) 

             OVER(ORDER BY DEPTNO ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 

             AS CENTER_1_AVGSAL ,--移动中心平均

           AVG(SUM(SAL)) 

             OVER() 

             AS TOTAL_AVGSAL,--整体平均

           FIRST_VALUE(SUM(SAL))

             OVER(ORDER BY DEPTNO ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 

             AS FIRST_VALUE --第一个值             

    FROM EMP 

    GROUP BY DEPTNO 

    ORDER BY DEPTNO;

 

   =====================================

   -- 2. 制表函数 

 

   SELECT * FROM EMP ORDER BY DEPTNO,JOB;

 

   SELECT DEPTNO,

   SUM(SUM(SAL)) OVER(PARTITION BY DEPTNO) AS TOTAL_PER_DEPT,-- 每个部门的工资支付总额

   ROUND(AVG(SUM(SAL)) OVER(PARTITION BY DEPTNO)) AS AVG_PER_DEPT,--每个部门的工资支付额基于岗位的平均工资支付额(即部门平均岗位支付工资)

   JOB,

   SUM(SUM(SAL)) OVER(PARTITION BY JOB) AS TOTAL_PER_JOB,--每个岗位的工资支付总额

   MIN(SUM(SAL)) OVER(PARTITION BY JOB) AS MIN_PER_JOB --每个岗位中每个部门工资支付额最低的支付额(即岗位最低工资支付额)

   FROM EMP 

   GROUP BY DEPTNO,JOB 

   ORDER BY DEPTNO,JOB; 

 

   --RATIO_TO_REPORT

   SELECT DEPTNO,JOB,SUM(SAL)PER_SAL,

          SUM(SUM(SAL)) OVER(PARTITION BY DEPTNO) AS TOTAL_PER_DEPT,

          SUM(SAL)/SUM(SUM(SAL)) OVER(PARTITION BY DEPTNO) AS PER_DEPT_RAT1,

          RATIO_TO_REPORT(SUM(SAL)) OVER (PARTITION BY DEPTNO) AS PER_DEPT_RAT2

   FROM EMP 

   GROUP BY DEPTNO,JOB 

   ORDER BY DEPTNO,JOB; 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值