首页 > 解决方案 > 有没有办法连接两个表,然后按某些属性分组

问题描述

您好,我有两张表 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 表达式” *原因:
*操作:

我期望得到按部门名称分组的以下列

姓名工资部门名称

标签: sqloracle

解决方案


错误似乎很明显 - 您在 中的列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 ;

请注意,当有联系时,这只会返回一个员工姓名。在这种情况下尚不清楚您想要什么。


推荐阅读