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。
  • 相关阅读:
    观察者模式股票提醒
    中介者模式虚拟聊天室
    模板方法模式数据库的连接
    职责链模式财务审批
    期末总结
    软件需求分析考试
    tomcat启动极其慢的解决方法困扰我一年多的问题终于解决
    状态模式银行账户
    解释器模式
    动态加载JS文件提升访问网站速度
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060794.html
Copyright © 2011-2022 走看看