您好,我有两个表Emp_774884和Dept_774884。
Emp_774884包含
emp_id ename sal deptid
Dept_774884包含
deptid dept_name no_of_emp city
我尝试了以下查询,以查找每个部门中薪水最高的员工。
select emp_774884.ename,Max(emp_774884.sal) as salary, dept_774884.DEPT_NAME
from emp_774884 join
dept_774884
on dept_774884.deptid = emp_774884.deptid
group by dept_774884.DEPT_NAME ;
但是我得到以下结果
ORA-00979:不是GROUP BY表达式
00979. 00000-“不是GROUP BY表达式”
*原因:
*动作:
我希望按照他们的部门名称分组以下列
ename工资部门名称
答案 0 :(得分:0)
错误似乎很明显-select
中有未聚合的列,而group by
中没有。仅仅添加列可以使错误消失,但是并不能满足您的要求。
Oracle有一个非常不错的扩展名为keep
,它可以满足您的要求:
select d.DEPT_NAME, max(e.sal) as max_salary,
max(e.ename) keep (dense_rank first order by e.sal desc) as ename_at_max
from emp_774884 e join
dept_774884 d
on d.deptid = e.deptid
group by d.DEPT_NAME ;
请注意,有联系时,此操作仅返回一个员工姓名。目前尚不清楚您想要的是什么。
答案 1 :(得分:0)
查询您想要的内容
select e.ename,d.DEPT_NAME, Max(e.sal) as salary, d.DEPT_NAME
from emp_774884 e join dept_774884 d on ( e.deptid = d.deptid)
join (select dept_774884.DEPT_NAME, Max(emp_774884.sal) as salary, dept_774884.DEPT_NAME
from emp_774884 e1 join
dept_774884 d1
on d1.deptid = e1.deptid
group by dept_774884.deptid) t on (e.deptid = t.deptid)
现在到了重点。为什么会得到
ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression" *Cause:
*Action:
因此,当您对某些列使用逐组例外,并且在选择时使用不同的列时,就会出现此例外。
换句话说
您只能选择分组依据中提到的那些列。
因此,在您的情况下,您将deptid用作分组列,但是您也选择了其他列。