查找各部门薪资最低的雇员,并显示雇员的名字,薪水,部门ID。
这一题视频中的解答有问题。各部门薪水最低的雇员的薪资应该是唯一的,但是视频中解答的SQL的输出结果如下:
SQL> select last_name,salary,department_id from employees where salary in (select min(salary)
from employees group by department_id) order by department_id;
LAST_NAME SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Whalen 4400.00 10
Fay 6000.00 20
Colmenares 2500.00 30
Mavris 6500.00 40
Olson 2100.00 50
Patel 2500.00 50
Vargas 2500.00 50
Marlow 2500.00 50
Vollman 6500.00 50
Perkins 2500.00 50
Sarchand 4200.00 50
Sullivan 2500.00 50
Lorentz 4200.00 60
Ernst 6000.00 60
Baer 10000.00 70
Kumar 6100.00 80
Bloom 10000.00 80
Sewall 7000.00 80
King 10000.00 80
Tucker 10000.00 80
LAST_NAME SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Tuvault 7000.00 80
De Haan 17000.00 90
Kochhar 17000.00 90
Popp 6900.00 100
Gietz 8300.00 110
Grant 7000.00
26 rows selected
以部门50为例有多个最低薪资,这个不符合逻辑。
我觉得这里要使用到关联子查询,如下:
SQL> select e1.last_name,e1.salary,e1.department_id from employees e1 where e1.department_id in(
2 select distinct e2.department_id from employees e2
3 ) and e1.salary=(
4 select min(e3.salary) from employees e3 where e3.department_id=e1.department_id
5 ) order by e1.department_id;
LAST_NAME SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Whalen 4400.00 10
Fay 6000.00 20
Colmenares 2500.00 30
Mavris 6500.00 40
Olson 2100.00 50
Lorentz 4200.00 60
Baer 10000.00 70
Kumar 6100.00 80
De Haan 17000.00 90
Kochhar 17000.00 90
Popp 6900.00 100
Gietz 8300.00 110
12 rows selected
其中部门90出现两次是因为两人并列最低部门薪资。
SQL> select last_name,salary,department_id from employees where department_id=90;
LAST_NAME SALARY DEPARTMENT_ID
------------------------- ---------- -------------
King 24000.00 90
Kochhar 17000.00 90
De Haan 17000.00 90