哪些员工的工资大于所在部门的平均工资?用mysql查询语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪些员工的工资大于所在部门的平均工资?用mysql查询语句相关的知识,希望对你有一定的参考价值。

1 这是表的数据:
create table emp_hiloo(empno int(8),ename varchar(20),job varchar(15),salary int(8),bonus int(8),hiredate date,mgr int(8),deptno int(8));insert into emp_hiloo values (1001,'zhangwuji','Manager',10000,2000,'2012-8-03',1005,10);insert into emp_hiloo values(1002,'liucangsong','Analyst',8000,1000,'2011-8-03',1001,10);insert into emp_hiloo values(1003,'liyi','Analyst',9000,1000,'2010-6-11',1001,10);insert into emp_hiloo values (1004,'guofurong','Programmer',5000,null,'2012-5-03',1001,10);insert into emp_hiloo values(1005,'zhangsanfeng','President',15000,null,'2011-12-5',null,20);insert into emp_hiloo values (1006,'yanxiaoliu','Manager',5000,400,'2009-1-5',1005,20);insert into emp_hiloo values(1007,'luwushuang','clerk',3000,500,'2008-6-5',1006,20);insert into emp_hiloo values (1008,'huangrong','Manager',5000,500,'2004-2-5',1005,30);insert into emp_hiloo values (1009,'weixiaobao','salesman',4000,null,'2009-8-6',1008,30);insert into emp_hiloo values (1010,'guojing','salesman',4500,500,'2005-6-5',1008,30);
要求:
mysql语句查询出工资大于其所在部门平均工资的员工信息,列出员工名,薪水,所在部门的平均工资。

参考技术A select t1.*, t2.s
from emp_hiloo t1 join (select deptno, avg(salary) s from emp_hiloo group by deptno) t2
on t1.deptno=t2.deptno
where t1.salary>t2.s追问

sql语句有错

追答

哪个地方有错?是要inner join 还是avg(salary) as s?

追问

呵呵, 可以执行. 能给我解释一下吗?

追答

select deptno, avg(salary) s from emp_hiloo group by deptno) 这是分组求每部门的平均工资

emp_hiloo t1 join (select deptno, avg(salary) s from emp_hiloo group by deptno) t2 on t1.deptno=t2.deptno
这是每个员工按部门与部门平均工资对齐

where t1.salary>t2.s 过滤出当前记录的工资大于平均工资

本回答被提问者采纳

如何使用 SQL 分析函数选择工资低于部门平均水平的员工?

【中文标题】如何使用 SQL 分析函数选择工资低于部门平均水平的员工?【英文标题】:How to select employees with salary less then the average of their departament using SQL analytical functions? 【发布时间】:2020-10-10 12:12:31 【问题描述】:

我正在尝试使用 SQL 分析函数对薪水低于其所在部门平均水平的员工做出选择语句。 上面的代码向我显示了所有员工及其部门的平均值。我该如何限制它,使其只选择工资

SELECT NAME, SALARY, ID_DEP, AVG(SALARY) OVER (PARTITION BY ID_DEP) DEP_AVERAGE FROM EMPLOYEES;

【问题讨论】:

【参考方案1】:

使用窗口函数和子查询:

select e.*
from (select e.*, 
             avg(salary) over (partition by id_dep) as avg_salary
      from employees e
     ) e
where salary < avg_salary;

您不能在wherehaving 子句中使用窗口函数。一些数据库支持过滤窗口函数的qualify 子句;但甲骨文没有。

【讨论】:

以上是关于哪些员工的工资大于所在部门的平均工资?用mysql查询语句的主要内容,如果未能解决你的问题,请参考以下文章

MySQL子查询(六)

Mysql练习题13道(21-33题)

查询emp表中每个员工的名称及其所在部门的平均工资。

SQL用他们部门的平均工资更新员工的工资

如何使用 SQL 分析函数选择工资低于部门平均水平的员工?

SQL - 试图让员工的平均工资高于平均部门工资