比较 table 处的一些值

comparing some values at the table

empno ename job mgr hiredate sal deptno
7839 KING PRESIDENT 2031-11-17 5000.00 10
7934 MILLER CLERK 7782 2032-01-23 1300.00 10
7782 CLARK MANAGER 7839 2031-06-09 2450.00 10
7369 SMITH CLERK 7902 2030-12-17 800.00 20
7876 ADAMS CLERK 7788 2037-05-23 1100.00 20
7566 JONES MANAGER 7839 2031-04-02 2975.00 20
7902 FORD ANALYST 7566 2031-12-03 3000.00 20
7788 SCOTT ANALYST 7566 2037-04-19 2900.00 20
7521 WARD SALESMAN 7698 2031-02-22 1250.00 30
7844 TURNER SALESMAN 7698 2031-09-08 1500.00 30
7900 JAMES CLERK 7698 2031-12-03 950.00 30
7499 ALLEN SALESMAN 7698 2031-02-20 1600.00 30
7698 BLAKE MANAGER 7839 2031-05-01 2850.00 30
7654 MARTIN SALESMAN 7698 2031-09-28 1250.00 30

所以我有这个 table 关于员工的数据。我想问的是如何找到比与 him/her 具有相同 deptno 的最低 sal 经理更高 sal 的人。而且这份工作不是总裁或经理。

例如,在 20 号部门,最低销售经理应该是 jones 和 2975。销售量大于 jones 并且与 jones 具有相同部门的人是 ford,所以我想打印出来。 我已经做了我的 sql 并且我这样写

select ename,sal from emp

where sal >= all(select min(sal) from emp where job = 'MANAGER' group by deptno)

and job not like 'PRESIDENT'

and job not like 'MANAGER'

group by deptno, ename,sal;

实际上这种 sql 工作得很好并且可以打印出 ford 但是当我再次查看它时我注意到当我使用它时它只是与使用 where 子句取出的所有数据进行比较而不是按部门编号分组比较。 有什么方法可以按deptno比较数据组吗?

您需要添加一个 WHERE 条件 e1.deptno = e2.deptno,将您的子查询与 table 连接起来。

SELECT e1.ename, e1.sal
FROM emp e1
WHERE sal >= (SELECT min(sal) FROM emp e2 WHERE e2.job = 'MANAGER' and e1.deptno = e2.deptno)
AND e1.job not like 'PRESIDENT'
AND e1.job not like 'MANAGER'
GROUP BY e1.deptno, e1.ename, e1.sal;

如果有效,请采纳我的回答。谢谢!

好的,这里有一种方法可以做到这一点。请注意,将您的查询稍微修改为连接而不是子查询

select e1.*
from emp e1
join 
(select deptno, min(sal) as minsal from emp where job = 'MANAGER' group by deptno) e
on e1.sal>=e.minsal and e1.deptno=e.deptno
AND e1.job not like 'PRESIDENT'
AND e1.job not like 'MANAGER'