加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何选择每个部门的最高工资,包括赚取它的员工

发布时间:2021-03-06 16:08:05 所属栏目:MsSql教程 来源:网络整理
导读:给出一个表Employees +-------+--------+-----------+------+-----------+------+------+--------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |+-------+--------+-----------+------+-----------+------+------+--------+| 7369 | SM

给出一个表Employees

+-------+--------+-----------+------+-----------+------+------+--------+
| EMPNO | ENAME  |    JOB    | MGR  | HIREDATE  | SAL  | COMM | DEPTNO |
+-------+--------+-----------+------+-----------+------+------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 17-Dec-80 |  800 |      |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 20-Feb-81 | 1600 |  300 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 22-Feb-81 | 1250 |  500 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 02-Apr-81 | 2975 |      |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 28-Sep-81 | 1250 | 1400 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 01-May-81 | 2850 |      |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 09-Jun-81 | 2450 |      |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 19-Apr-87 | 3000 |      |     20 |
|  7839 | KING   | PRESIDENT | null | 17-Nov-81 | 5000 |      |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 08-Sep-81 | 1500 |    0 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 23-May-87 | 1100 |      |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 03-Dec-81 |  950 |      |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 03-Dec-81 | 3000 |      |     20 |
|  7934 | MILLER | CLERK     | 7782 | 23-Jan-82 | 1300 |      |     10 |
+-------+--------+-----------+------+-----------+------+------+--------+

和另一个表部门

+--------+------------+----------+
| DEPTNO |   DNAME    |   LOC    |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+

我怎样才能找到每个部门的最高工资?

输出格式行是:

DEPTNO,ENAME,DNAME,SAL,LOC

解决方法

您可以使用将获得每个部门的max(薪水)的子查询:
select de.deptno,e.ename,de.dname,e.sal,de.loc
from employees e
inner join
(
  select max(e.sal) MaxSalary,d.deptno,d.loc,d.dname
  from employees e
  inner join departments d
     on e.deptno = d.deptno
  group by d.deptno,d.dname
) de
  on e.sal = de.MaxSalary
  and e.deptno = de.deptno
order by de.deptno

请参阅SQL Fiddle with Demo.您会注意到,这会为deptno = 20返回2行,因为有两个员工具有相同的薪水.

如果您使用的是具有窗口函数的数据库,那么您将需要使用dense_rank(),这样您将返回在每个部门中具有最高薪水的所有员工:

select d.deptno,d.dname,d.loc
from 
(
  select e.ename,e.deptno,dense_rank() over (partition by deptno order by sal desc) as salRank
  from employees e
) e 
inner join departments d
  on e.deptno = d.deptno
where salRank = 1;

见SQL Fiddle with Demo.

两个版本的结果是:

| DEPTNO | ENAME |      DNAME |  SAL |      LOC |
-------------------------------------------------
|     10 |  KING | ACCOUNTING | 5000 | NEW YORK |
|     20 | SCOTT |   RESEARCH | 3000 |   DALLAS |
|     20 |  FORD |   RESEARCH | 3000 |   DALLAS |
|     30 | BLAKE |      SALES | 2850 |  CHICAGO |

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读