查询平均工资最高的部门中工资最低的员工信息。
员工表中的字段有
员工编号
姓名
工资
部门编号
一步步分析,最后再把语句嵌套起来就会很容易写出sql语句
select * from emp where empId=(
select empId form emp group by deptno order by avg(sal) asc where rownum=1)
order by sal desc where rownum=1
select * from 员工表 where 部门编号=(select 门编号 from 员工表 group by 部门编码 having avg(工资)=max(工资)) order by 工资 limit 0,1
我是通过子查询先查询平均工资最高的部门id(具体就是通过avg逆序的第一个)
然后将这个部门id作为条件来查询工资最低的员工信息(具体是通过工资进行排序,取第一个),所以结果只包含一个结果,如果需要查询所有的工资最低的员工信息,可能就需要先查到最低工资,再查所有工资=最低工资的员工信息。
具体的测试表结构和用例
查询原句和最终的执行结果,符合预期,为id为4的员工
select 工资,姓名,员工编号,部门编号 from table
left join
( select max(avg(工资)) as sal,部门编号 from table group by 部门编号) b
on table.部门编号 = b.部门编号
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
补充前面那个,如果有多个都是最低薪水的情况。
测试用例,平均最高是depId=2,对应最低薪水是id(4、5)及b2、b3
sql以及运行结果
符合预期,不过这个应该不是比较优的。。你自己研究研究
完整sql
select e.*
from employee e,
(
select depId, salary
from employee
where depId = (
select depId
from employee
group by depId
order by avg(salary) desc
limit 1
) order by salary limit 1) as t
where e.salary = t.salary and e.depId = t.depId
SELECT
员工编号,
姓名,
工资,
部门编号
FROM
员工表
WHERE
部门编号 = ( SELECT 部门编号 FROM `员工表` GROUP BY 部门编号 HAVING AVG( 工资 ) ORDER BY AVG( 工资 ) LIMIT 1 )
HAVING
MIN( 工资 )
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
以emp表为例,empno:员工编号,ename:姓名,sal:工资,deptno:部门编号
步骤一.先查部门平均工资最高的值
方案一:select max(avg(sal)) from emp group by deptno;
方案二:select max(T) from (select avg(sal) T from emp group by deptno)
步骤二.查询部门平均工资最高的部门编号
select deptno from emp group by deptno avg(sal)=()
括号内为步骤一的查询结果 ,即将步骤一作为子查询,意思是部门的平均工资等于部门平均工资最高值的部门是哪个。
步骤三.查询这个部门中最低的员工工资
select min(sal) from emp where deptno =()
括号内为第二步的查询结果
步骤四.查询所需员工信息
select * from emp where sal=() 括号内步骤三作为子查询
and deptno=()括号内步骤二作为子查询,主要防止其他有跟这个部门员工最低薪资相等的员工
最后 把四个步骤镶嵌起来就可以查询出正确结果了,这个题考查的主要是子查询的应用,看着很多,但是只有思路
清晰,把条件剖解开,就不难写出完整的SQL语句了。