sql 语句 查询平均工资最高的部门中工资最低的员工信息


查询平均工资最高的部门中工资最低的员工信息。
员工表中的字段有
员工编号
姓名
工资
部门编号
 

一步步分析,最后再把语句嵌套起来就会很容易写出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语句了。