SQL实战03

本文通过SQL查询展示了员工自入职以来的薪水涨幅,统计了各部门的工资记录数,并对所有员工的当前薪水进行了排名。同时,给出了所有非manager员工的当前薪水详情。查询涉及到多表联合、分组聚合以及窗口函数的使用,揭示了员工薪酬管理和部门薪资分布情况。
摘要由CSDN通过智能技术生成

21 查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序

(注:可能有employees表和salaries表里存在记录的员工,有对应的员工编号和涨薪记录,但是已经离职了,离职的员工salaries表的最新的to_date!='9999-01-01',这样的数据不显示在查找结果里面)

select a.emp_no,(a.salary-b.salary) growth FROM (select emp_no,salary from salaries WHERE to_date='9999-01-01') a
join (select s.salary,s.emp_no from employees e join salaries s on e.hire_date=s.from_date and e.emp_no=s.emp_no) b 
on a.emp_no=b.emp_no ORDER BY growth;
+--------+--------+
| emp_no | growth |
+--------+--------+
|  10004 |   3359 |
|  10001 |  10041 |
+--------+--------+
2 rows in set (0.00 sec)

注释:定义a和b 

a 是当前工资 current_salary  b是初始工资 start_salary

a.salary-b.salary 定义为growth

排序关键词为growth

a 取值:to_date='9999-01-01'时的工资和emp_no

b取值:需要内联salaries和employees两张表,on hire_date和from_date一致,另外emp_no一致

a和b也需要关键字连起来emp_no

排序默认为升序

22 统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum

select de.dept_no,de.dept_name,count(*) sum 
FROM (departments de inner join dept_emp d ON de.dept_no=d.dept_no INNER join salaries s ON d.emp_no=s.emp_no) 
GROUP BY d.dept_no;
+---------+-------------+-----+
| dept_no | dept_name   | sum |
+---------+-------------+-----+
| d001    | Marketing   |   2 |
| d004    | Production  |   5 |
| d002    | Finance     |   1 |
| d005    | Development |   1 |
+---------+-------------+-----+
4 rows in set (0.00 sec)

注释:三表联合查询,两次内联

三表:departments de        dept_emp d        salaries   s

departments和dept_emp 内联字段为dept_no员工部门编号

dept_no和salaries内联字段为emp_no为员工编号

部门的salaries表有多少记录,只需要以dept_no为group by字段

23 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

select emp_no,salary,dense_rank() over w as 'rank'
from salaries where to_date='9999-01-01' 
WINDOW w as (order by salary desc);
+--------+--------+------+
| emp_no | salary | rank |
+--------+--------+------+
|  10001 |  98999 |    1 |
|  10002 |  88070 |    2 |
|  10007 |  88070 |    2 |
|  10004 |  74057 |    3 |
|  10003 |  43311 |    4 |
|  10006 |  43311 |    4 |
+--------+--------+------+
6 rows in set (0.00 sec)

24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'

select de.dept_no,de.emp_no,s.salary
    FROM dept_emp de inner join employees e on de.emp_no=e.emp_no
    inner join salaries s ON e.emp_no=s.emp_no
    where s.to_date='9999-01-01'
    and de.emp_no NOT IN (select emp_no FROM dept_manager);
+---------+--------+--------+
| dept_no | emp_no | salary |
+---------+--------+--------+
| d001    |  10001 |  98999 |
| d004    |  10003 |  43311 |
| d005    |  10007 |  88070 |
+---------+--------+--------+
3 rows in set (0.00 sec)

注释:需要联合查询4张表 dept_emp,dept_manager, salaries,employees

三个字段:dept_no,和emp_no来自dept_emp,salary来自salaries

两两联合查询关键字emp_no

非manager员工

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值