zoukankan      html  css  js  c++  java
  • Oracle查询部门工资最高员工的两种方法 1、MAX()函数 2、RANK()函数

      本文以SCOTT用户下初始的EMP表为参考。代码可直接使用。
      查询EMP表结构的语句如下,【代码1】:

    DESC EMP;
    

      EMP表结构如下:【结果1】:

    SQL> DESC EMP;
     名称                                                              是否为空? 类型
     ----------------------------------------------------------------- -------- --------------------------------------------
     EMPNO                                                             NOT NULL NUMBER(4)
     ENAME                                                                      VARCHAR2(10)
     JOB                                                                        VARCHAR2(9)
     MGR                                                                        NUMBER(4)
     HIREDATE                                                                   DATE
     SAL                                                                        NUMBER(7,2)
     COMM                                                                       NUMBER(7,2)
     DEPTNO                                                                     NUMBER(2)
    

      本文只选取其中的4列作为参考,分别是EMPNO,ENAME,SAL,DEPTNO。
      按照工资降序排序的查询语句如下,【代码2】:

    SELECT EMPNO,ENAME,SAL,DEPTNO
    FROM EMP
    ORDER BY SAL DESC;
    

      排序结果如下,【结果2】:

    SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
      2  FROM EMP
      3  ORDER BY SAL DESC;
    
         EMPNO ENAME             SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7839 KING             5000         10
          7902 FORD             3000         20
          7788 SCOTT            3000         20
          7566 JONES            2975         20
          7698 BLAKE            2850         30
          7782 CLARK            2450         10
          7499 ALLEN            1600         30
          7844 TURNER           1500         30
          7934 MILLER           1300         10
          7521 WARD             1250         30
          7654 MARTIN           1250         30
          7876 ADAMS            1100         20
          7900 JAMES             950         30
          7369 SMITH             800         20
    
    已选择14行。
    

      现在我想查询出每个部门的工资最高的员工,应该怎么做呢?继续……

    方法1(嵌套查询 & MAX()函数 & 自身连接)

      查询每个部门中工资最高的员工,并按照部门号升序排序,【代码3】:

    SELECT EMPNO,ENAME,SAL,DEPTNO
    FROM EMP E1
    WHERE
        SAL = (
            SELECT MAX(SAL)
            FROM EMP E2
            WHERE E1.DEPTNO=E2.DEPTNO
        )
    ORDER BY DEPTNO;
    

      查询结果如下,【结果3】:

    SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
      2  FROM EMP E1
      3  WHERE
      4      SAL = (
      5          SELECT MAX(SAL)
      6          FROM EMP E2
      7          WHERE E1.DEPTNO=E2.DEPTNO
      8      )
      9  ORDER BY DEPTNO;
    
         EMPNO ENAME             SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7839 KING             5000         10
          7788 SCOTT            3000         20
          7902 FORD             3000         20
          7698 BLAKE            2850         30
    

    方法2(嵌套查询 & RANK()函数 & 列表分区)

      查询每个部门中工资最高的员工,并按照部门号升序排序,【代码4】:

    SELECT EMPNO,ENAME,SAL,DEPTNO
    FROM (
        SELECT
            RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) R,
            EMPNO,ENAME,SAL,DEPTNO
        FROM EMP
    )
    WHERE R=1
    ORDER BY DEPTNO;
    

      查询结果如下,【结果4】:

    SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
      2  FROM (
      3      SELECT
      4          RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) R,
      5          EMPNO,ENAME,SAL,DEPTNO
      6      FROM EMP
      7  )
      8  WHERE R=1
      9  ORDER BY DEPTNO;
    
         EMPNO ENAME             SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7839 KING             5000         10
          7788 SCOTT            3000         20
          7902 FORD             3000         20
          7698 BLAKE            2850         30
    

    备注:

    • 环境:Windows 10
    • 软件:Oracle 11g R2。
  • 相关阅读:
    python实现读取并显示图片的两种方法
    如何在jupyter中安装R
    FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证
    FPGA设计千兆以太网MAC(2)——以太网协议及设计规划
    FIFO深度计算
    【不定期更新】FPGA/IC岗位常见笔试面试题总结(基础知识)
    【原创】建立与保持时间裕量详细分析
    利用ZYNQ SOC快速打开算法验证通路(6)——利用AXI总线实时配置sysGen子系统
    【转载】泰勒展开式
    利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060794.html
Copyright © 2011-2022 走看看