有没有办法联接两个表,然后按某些属性分组

时间:2019-04-19 12:06:48

标签: sql oracle

您好,我有两个表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工资部门名称

2 个答案:

答案 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用作分组列,但是您也选择了其他列。