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。
  • 相关阅读:
    安装 log.io 实时监控 php_error 日志
    macOS安装Solr并索引MySQL
    如何创建一个GitLab Web Hooks?
    在macOS Sierra 10.12搭建PHP开发环境
    在MySQL中,如何计算一组数据的中位数?
    mongodb 学习笔记
    percona教程:MySQL GROUP_CONCAT的使用
    MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
    EF| CodeFirst 代码先行
    最经典25本Python编程开发电子书精粹
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060794.html
Copyright © 2011-2022 走看看