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。
  • 相关阅读:
    〖教程〗Ladon探测域名内网IP(只允许域名访问站点)
    Ladon枚举远程主机网卡信息(OXID定位多网卡主机)
    Ladon批量检测漏洞 SMBGhost CVE-2020-0796
    Ladon7.0扫描器简明教程/用法例子
    〖教程〗Ladon IIS站点密码读取
    〖教程〗Ladon连接WebShell一句话远程执行命令
    〖教程〗Ladon内网横向移动Wmiexec/psexec/atexec/psexec/webshell
    〖教程〗Winrm远程命令/WimrnCmd/端口复用后门/Windows密码爆破
    〖教程〗Ladon以指定用户权限运行程序或命令
    〖教程〗Ladon迷你WEB服务器/一键内网HTTP服务器
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060794.html
Copyright © 2011-2022 走看看