例子4:求出每一个部门里赚钱最多的那个人的名字
Select ename, deptno, sal from emp where sal in (
Select sal from (--不理解from 后面为什么没有tablename,而是紧跟是(),()里是字段值,我想问()里可以是字段值吗?
Select deptno, max(sal) sal from emp group by deptno
)
)
谢谢了。
Select ename, deptno, sal from emp where sal in (
Select sal from (--不理解from 后面为什么没有tablename,而是紧跟是(),()里是字段值,我想问()里可以是字段值吗?
Select deptno, max(sal) sal from emp group by deptno
)
)
谢谢了。
解决方案 »
- 关于DUAL表与其他表UNION 表GROUP BY的问题
- 关于参数文件的问题
- SqlServer导数据到oracle
- oracel like 查询 VARCHAR2 类型与INTEGER类型的比较
- 项目需要,我需要从oracle9i中批导出文本格式数据,各位大侠有好办法没有?(急)
- [菜鸟来咧]请问谁能?
- 请教,游标中传递参数问题。。。
- 请教:ORA-04098: 触发器 'JXKH.TR_JXKH' 无效且未通过重新确认!
- 误删了一个表空间导致该表空间下用户怎么也删不掉,奇怪,奇怪?
- ORACLE系统文件丢失的还原
- 一个诡异的问题,关于调用oracle函数
- 一个简单的sql语句执行结果的困惑
from emp e1
where exists (select 1 from e2
where e2.deptno=e1.deptno
group by e2.deptno
having max(sal)=e1.sal );
from emp e1
where exists (select 1 from emp e2
where e2.deptno=e1.deptno
group by e2.deptno
having max(sal)=e1.sal );
Select ename, deptno, sal from emp where (deptno,sal) in (
Select deptno,sal from (--括号里的是一个子查询,你可以把()里的内容当成一个视图
Select deptno, max(sal) sal from emp group by deptno
)
)
多嵌套的那层也是多此一举。我比较喜欢下面的写法
select * from emp t
where not exists(
select 1 from emp where deptno=t.deptno
and sal>t.sal)
from emp e1
where exists (select 1 from emp e2
where e2.deptno=e1.deptno
group by e2.deptno
having max(sal)=e1.sal );
--from 后面的整个括号的内容实际上是一个子查询产生的数据集,可把它看成一个普通表就行了
--from后不能直接是字段
SELECT ename, deptno, sal FROM emp WHERE sal IN (SELECT MAX(sal) FROM emp GROUP BY deptno)
SELECT ename, deptno, sal
FROM (SELECT ename, deptno, sal, rank() over(PARTITION BY t.deptno ORDER BY sal DESC) rn
FROM emp t)
WHERE rn = 1;
FROM emp e
WHERE sal in
(SELECT MAX(sal) FROM emp m
WHERE e.deptno = m.deptno)
--可以直接这样来 高效
select ename, deptno, sal from emp a where not exists(select 1 from emp where a.deptno=deptno and a.sal<sal)
我怎么感觉应该是 exists 啊
在exists,not exists 和分析函数这三个sql里,分析函数效率最高吧。
select e1.ename,e1.deptno,e1.sal from emp e1 where exists (select 1 from emp e2 where e1.deptno=e2.deptno and e1.sal=(select max(sal) from emp where deptno=e2.deptno));