首页 > 其他分享 >平均工资:部门与公司比较

平均工资:部门与公司比较

时间:2022-09-28 23:15:09浏览次数:53  
标签:salary t1 平均工资 部门 employee 2017 比较 id

一. 题目:

给如下两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同)。

工资表:salary
id employee_id amount pay_date
1 1 9000 2017-03-31
2 2 6000 2017-03-31
3 3 10000 2017-03-31
4 1 7000 2017-02-28
5 2 6000 2017-02-28
6 3 8000 2017-02-28
职员表:employee
employee_id department_id
1 1
2 2
3 2

表salary 中employee_id 字段是表 employee 中 employee_id 字段的外键。

对于如上样例数据,结果为:

pay_month department_id comparison
2017-03 1 higher
2017-03 2 lower
2017-02 1 same
2017-02 2 same
解释:

​ 在三月,公司的平均工资是 (9000+6000+10000)/3 = 8333.33......

​ 由于部门‘1’里只有一个 employee_id 为‘1’的员工,所以部门‘1’的平均工资就是此人的工资 9000 。因为 9000 > 8333.33 ,所以比较结果‘higher’。

​ 第二个部门的平均工资为 employee_id 为‘2’和‘3’两个人的平均工资,为(6000+10000)/2=800。因为 8000 < 8333.33 ,所以比较结果‘lower’。

​ 在二月用同样的公式求平均工资并比较,比较结果为‘same’,因为部门‘1’和部门‘2’的平均工资与公司的平均工资相同,都是 7000。

二. 答案

SELECT t1.发工资月份, t1.部门,
CASE 
	WHEN t1.部门平均工资 > t2.公司平均工资 THEN 'higher'
	WHEN t1.部门平均工资 < t2.公司平均工资 THEN 'lower'
	ELSE 'same'
END AS '比较结果',
t1.部门平均工资,
t2.公司平均工资
FROM
(
-- 拿到每个月份部门的平均工资
SELECT employee.department_id AS '部门', SUM(salary.amount) / COUNT(salary.employee_id) '部门平均工资', DATE_FORMAT(salary.pay_date, '%Y-%m') AS '发工资月份' FROM salary 

RIGHT JOIN employee ON salary.employee_id = employee.employee_id

GROUP BY 发工资月份, employee.department_id
) t1
INNER JOIN
(
-- 拿到每个月份公司的平均工资
SELECT DATE_FORMAT(salary.pay_date, '%Y-%m') AS '发工资月份', SUM(salary.amount) / COUNT(salary.employee_id) AS '公司平均工资'
FROM salary
GROUP BY 发工资月份
) t2 
ON t1.发工资月份 = t2.发工资月份

标签:salary,t1,平均工资,部门,employee,2017,比较,id
From: https://www.cnblogs.com/xiqingbo/p/arithmetic-02.html

相关文章

  • [答疑]小明是一部的员工,转到了二部。这时小明的部门属性就变了
    大田二十(253***7)2012-05-0821:08:55请潘老师和各位帮个忙。有个数据存贮的问题一直糊涂。小明是一部的员工,转到了二部。这时小明的部门属性就变了,这里是要求个人所有成......
  • 不区分大小写的比较函数
    strcasecmp函数函数功能:比较参数s1和s2字符串,比较时会自动忽略大小写的差异。返回值:若参数s1和s2字符串相等则返回0。s1大于s2则返回大于0的值,s1小于s2则返回小于0......
  • 165. 比较版本号
    165.比较版本号给你两个版本号version1和version2,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个'.'连接。每个修订号由多位数字组成,可能包含......
  • 错过了一个比较大的编程比赛
    每天要积极乐观,不要再逼着自己去看言情小说,真的不喜欢,娱乐时间是要做让自己放松的事情的,不要再去想爱情,我绝对是不喜欢像唐伯虎那样的多情的人的,这一生能做好一件事对......
  • UKF和EKF算法在非线性系统中的应用比较
    参考内容:书籍《卡尔曼滤波原理及应用------matlab仿真》这本书对kalman算法的解析很清晰,MATLAB程序很全,适合初学者(如有侵权,请联系删除(qq:1491967912))之前学习了EKF算法和......
  • 比较两个list
    List<string>list1=newList<string>(){"4ee","wf","6yh","gg","wjjgf","vvc"};List<string>list2=newList<string>(){"p4ee","wpf"......
  • 「浙江理工大学ACM入队200题系列」问题 A: 零基础学C/C++34—— 3个数比较大小(冒泡排
    深夜写的,代码都还没来得及跑一便,可能有错误,欢迎指出,后续会检验一遍并修改错误.本题是浙江理工大学ACM入队200题第四套中的A题,同时给出了冒泡排序和选择排序算法......
  • OA系统通用模块:用户、部门和请假(1):用户需求和故事
    根据该请假文档,完成以下1.部门管理(树形结构,增删改查)2.用户管理(依附于机构-子公司名称,增删改查、重置密码(123456)、职位等级)财务部财务1部会计部......
  • T1043 整数大小比较(信息学一本通C++)
      目录 [题目描述]输入两个整数,比较它们的大小。若x>y,输出>;若x=y,输出=;若x<y,输出<。[输入]一行,包含两个整数x和y,中间用单个空格隔开。0≤x<2^32,−2^31≤y<2^31。......
  • STL string的查找,比较,截取子串
    compare函数在>时返回1,<时返回-1,==时返回0。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。intcompare(conststring&s)const;//与字符串s......