永发信息网

oracle自带表emp的查询里每个部门最高薪水的员工的信息,如下

答案:2  悬赏:0  手机版
解决时间 2021-02-01 05:23
  • 提问者网友:且恨且铭记
  • 2021-01-31 13:09
select ename, sal, empno, t.deptno
from emp
join (select max(sal) max_sal, deptno from emp group by deptno) t
on (emp.sal = t.max_sal and emp.deptno = t.deptno);

对于字段别名max(sal) max_sal,因为这条子查询已经视为t了,为什么不能写成:
select ename, sal, empno, t.deptno
from emp
join (select max(sal), deptno from emp group by deptno) t
on (emp.sal = t.max(sal) and emp.deptno = t.deptno);
执行报错:

或者不给子查询做别名t,写成:
select ename, sal, empno, emp.deptno
from emp
join (select max(sal) max_sal, deptno from emp group by deptno)
on (emp.sal =
(select max(sal) max_sal, deptno from emp group by deptno)
.max_sal and
emp.deptno =
(select max(sal) max_sal, deptno from emp group by deptno).deptno);

甚至不给字段max(sal)做别名max_sal,直接写成:

为什么都报了这个缺少右括号的错误,如果不引用,上面两种该怎么写呢?

最后一段写错了是:
select ename, sal, empno, emp.deptno
from emp
join (select max(sal), deptno from emp group by deptno)
on (emp.sal =
(select max(sal), deptno from emp group by deptno)
.max(sal) and
emp.deptno =
(select max(sal), deptno from emp group by deptno).deptno);

如果不用字段max(sal)的别名、不用表select max(sal), deptno from emp group by deptno的别名的话,这两种情况,语句该写成怎样的呢?















最佳答案
  • 五星知识达人网友:独行浪子会拥风
  • 2021-01-31 13:32
为什么题主要有意避免使用别名呢?
oracle的别名有些可以使用表名代替,有些必须要使用别名,题主有些过于较真了。
题主可以换一个写法,效率比这个好些:
select *
  from (select ename,
               sal,
               max(sal) over(partition by deptno) max_sal,
               empno,
               deptno
          from emp)
 where sal = max_sal
全部回答
  • 1楼网友:行雁书
  • 2021-01-31 14:09
支持一下感觉挺不错的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯