我有一个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列吗?
我有一个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列吗?
你将不得不组的结果由sal
柱:
select did,ename,max(sal) from emp group by sal
不能使用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
MAX
工作在组在GROUP BY
子句中指定,并找出每个组的最大值。如果未指定要分组的一组列,则会找到整个结果集的最大值。
你需要找到最大SAL,那么你就可以查询匹配的行:
select did, ename, sal
from emp
where sal = (select max(sal) from emp)
如预期在Oracle中,这可能无法正常工作,尽管它可能在MySQL工作。 –
你是对的Tim.My的意图是有每个部门的最大值。 –