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

我有一张表格,里面有员工的数据.我想问的是,如何找到一个拥有比最低级别的sal经理更大的sal经理,而他/她拥有相同的部门.而且这份工作不是总裁或经理.

例如,在德普诺20号球场,最低级别的赛尔经理应该是2975的琼斯.有比琼斯大的萨尔,和琼斯有同样的德普诺的人是福特,所以我想把这个打印出来.

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工作得很好,可以打印出来,但当我再次查看时,我注意到,当我使用all时,它只是与where子句中取出的所有数据进行比较,而不是按deptno编号分组进行比较.

推荐答案

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

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;

如果有效,请接受我的回答.谢谢

Sql相关问答推荐

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

Oracle SQL-将结果列在单行中

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

对任何(数组)使用LIKE?

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

按分类标准检索记录

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

如何计算给定日期前三个月的值以及月初数据?

如何在SQL中从多个查询进行分组

使用 union 的有序结果获取行数

如何根据创建日期查找两个表中最接近的记录?

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

PostgreSQL - 从同一张表中获取值

使用in和and运算符过滤记录的条件

HIVE SQL where 子句未按预期工作

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

具有关联统计信息 N+1 的 Rails 6 索引资源?

将单行中的多个行值转换为列

SQL Group By 然后映射出是否存在值

遍历数据,计算每个月最后三天的总和