2017-04-12 66 views
0

我有一个table emp (ename,eid,did,sal,sex)其中列确实是外键与另一个table dept (did,dname)我们不能使用选择另一列max()在sql

我想获得公司的max sal以及得到它的人的name and did

我执行以下查询

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

但结果是:

ORA-00937:不是单组分组函数

所以我的问题是可以”我有超过1列吗?

回答

2

你将不得不组的结果由sal柱:

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

如预期在Oracle中,这可能无法正常工作,尽管它可能在MySQL工作。 –

+0

你是对的Tim.My的意图是有每个部门的最大值。 –

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 
0

MAX工作在组在GROUP BY子句中指定,并找出每个组的最大值。如果未指定要分组的一组列,则会找到整个结果集的最大值。

你需要找到最大SAL,那么你就可以查询匹配的行:

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