哪些员工的工资大于所在部门的平均工资?用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语句查询出工资大于其所在部门平均工资的员工信息,列出员工名,薪水,所在部门的平均工资。
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;
您不能在where
或having
子句中使用窗口函数。一些数据库支持过滤窗口函数的qualify
子句;但甲骨文没有。
【讨论】:
以上是关于哪些员工的工资大于所在部门的平均工资?用mysql查询语句的主要内容,如果未能解决你的问题,请参考以下文章