我们不能在sql中使用max()选择另一列

时间:2017-04-12 05:42:57

标签: sql

我有一个table emp (ename,eid,did,sal,sex),其中列是外键,另一个table dept (did,dname)

我希望得到公司max sal以及获得该的人name and did

我正在执行以下查询

select did,ename ,max(sal) from emp;

但结果是:

  

ORA-00937:不是单组组功能

所以我的问题是我能不能超过1列?

3 个答案:

答案 0 :(得分:2)

您必须按sal列对结果进行分组:

select did,ename,max(sal) from emp group by sal

答案 1 :(得分:2)

您不能像这样使用MAX聚合函数。使用不带MAX子句的GROUP BY只会返回一个具有最大sal值的记录。您不能在SELECT子句中放置任何其他非聚合字段。

如果您想获得具有最大sal值的记录,那么您必须进行自我加入:

select e1.*
from emp as e1
inner join (
   select max(sal) as max_sal
   from emp
) as e2 on e1.sal = e2.max_sal

注意:以上查询将返回表emp中的多个记录,以防多个记录共享相同的最大sal值。

修改

如果您想获得每个部门的最高工资,那么您必须在使用的派生表中包含GROUP BY子句:

select e1.*
from emp as e1
inner join (
   select did, max(sal) as max_sal
   from emp
   group by did
) as e2 on e1.did = e2.did and e1.sal = e2.max_sal

答案 2 :(得分:0)

MAXGROUP BY子句中指定的组进行操作,并查找每个组的最大值。如果未指定要分组的列集,则会查找整个结果集的最大值。

您需要找到max sal,然后您可以查询匹配的行:

select did, ename, sal
from emp
where sal = (select max(sal) from emp)