sql - 有没有办法连接两个表,然后按某些属性分组
问题描述
您好,我有两张表 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 表达式” *原因:
*操作:
我期望得到按部门名称分组的以下列
姓名工资部门名称
解决方案
错误似乎很明显 - 您在 中的列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 ;
请注意,当有联系时,这只会返回一个员工姓名。在这种情况下尚不清楚您想要什么。
推荐阅读
- r - 匹配 R 列表中的产品
- angular - Angular 中的动态路由链接
- c# - 如何重写我的 xamarin 表单应用程序的标题标题
- mariadb - 为什么在 MariaDB 上运行更新 sql 时连接丢失?
- javascript - Selenium Python - 无法关闭模式弹出窗口 - DOM 不可遍历
- android - 在 setContentView 之前设置语言会导致无休止的循环
- spring-boot - 架构“SA”不存在
- javascript - Webdriverio:单击阴影 dom 元素
- java - 从 json 字符串创建签名并在 PHP 中使用 openssl 签名
- python - 如何更改熊猫(matplotlib)中绘图的标题大小?