问题描述
select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp t group by t.deptno order by t.deptno);
解决方案
select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp t group by t.deptno order by t.deptno);你这句sql里, 后面的select子句会select出多个max(t.sal)记录的,虽然不知道为啥是括号错误,但是 t2.sal =(select xxxx)肯定是有问题的。应该用in,另外子句也不需要order by,要排序也应该是对最后的结果排序 放在外面吧select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal in (select max(t.sal) from emp t group by t.deptno) order by t2.sal;
解决方案二:
引用楼主的语句应改成如下 select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp); 因为子查询当中的分组和排序好像没有作用。这样写是对的,因为你要找最大的没必要分组,你那种写法逻辑上有问题,你按照deptno分组了,又要找最大的,那就表示每一个部门的最大工资,他返回的结果就不是一个了,分组分了几个就有几个返回值.
解决方案三:
这个语句明显有语法上的错误嘛,看你写,大致了解下,你想要的结果是,每个部门业绩最好的员工吗?SELECT t2.empno, t2.ename, t2.salFROM emp t2, (SELECT MAX(t.sal), t.deptno FROM emp tGROUP BY t.deptnoORDER BY t.deptno) t1 WHERE t2.deptno = t1.deptno AND t2.sal = t1.sal;
解决方案四:
楼主的语句应改成如下select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp);因为子查询当中的分组和排序好像没有作用。