我有一个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列?
答案 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)
MAX
对GROUP BY
子句中指定的组进行操作,并查找每个组的最大值。如果未指定要分组的列集,则会查找整个结果集的最大值。
您需要找到max sal,然后您可以查询匹配的行:
select did, ename, sal
from emp
where sal = (select max(sal) from emp)