• 分析函数


    员工表查询:

    1:查询每个部门的工资按工资排序;

    1 select 
    2 SAL 工资,
    3 DEPTNO 部门,
    4 ENAME 姓名,
    5 ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) 工资在本部门排序
    6  from EMP

     2:分组的时候 PARTITION BY 后面可以跟多个条件。

    3:求每个部门工资最高的信息

    select * from (SELECT ENAME,SAL,DEPTNO,RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) MM FROM EMP) WHERE MM=1

    小知识:用rank()不用ROW_NUMBER()的原因是:因为如果同班有两个并列第一,row_number()只返回一个结果

    2.rank()和dense_rank()的区别是: 

          --rank()是跳跃排序,有两个第二名时接下来就是第四名 
          --dense_rank()l是连续排序,有两个第二名时仍然跟着第三名 
      
    SELECT DEPTNO,
                  dense_rank() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW,
                  ENAME,
                  SAL
                  FROM EMP
                  WHERE DEPTNO='30'

    SELECT DEPTNO,
                  rank() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW,
                  ENAME,
                  SAL
                  FROM EMP
                  WHERE DEPTNO='30'

    SELECT DEPTNO,
                  ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) RW,
                  ENAME,
                  SAL
                  FROM EMP
                  WHERE DEPTNO='30'

    4:求个人在本部门的工资百分比
    select ENAME,DEPTNO,sal,sal*100/sum(sal) over(partition by DEPTNO) percent from EMP WHERE ENAME='ALLEN';  

    select ENAME,DEPTNO,sal,sal*100/sum(sal) over(partition by DEPTNO) percent from EMP;  

     5:lag()与lead():求之前或之后的第N行
    lag和lead函数可以在一次查询中取出同一字段的前n行的数据和后n行的值。这种操作可以使用对相同表的表连接来实现,不过使用lag和lead有更高的效率。
    lag(arg1,arg2,arg3)
    第一个参数是列名,
    第二个参数是偏移的offset,
    第三个参数是超出记录窗口时的默认值。

    select  ENAME,SAL,lag(ENAME,4,0) OVER(ORDER BY SAL) FROM EMP;

    select  ENAME,SAL,lead(ENAME,4,0) OVER(ORDER BY SAL) FROM EMP;

  • 相关阅读:
    java中的位运算符
    Servlet中的初始化参数、上下文参数、以及@Resource资源注入
    Servlet中文件上传的几种方式
    marquee标签的使用
    SpringBoot热部署的两种方式
    eclipse中安装lombok插件
    关于Servlet中的转发和重定项
    Cormen — The Best Friend Of a Man CodeForces 732B
    牛客小白月赛9之签到题
    Codeforces アンバランス / Unbalanced
  • 原文地址:https://www.cnblogs.com/bulrush/p/7591442.html
Copyright © 2020-2023  润新知