我是靠谱客的博主 高兴泥猴桃,最近开发中收集的这篇文章主要介绍Leetcode_615. 平均工资:部门与公司比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目难度

困难

题目描述

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

idemployee_idamountpay_date
1190002017-03-31
2260002017-03-31
33100002017-03-31
4170002017-02-28
5260002017-02-28
6380002017-02-28

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

employee_iddepartment_id
11
22
32

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

pay_monthdepartment_idcomparison
2017-031higher
2017-032lower
2017-021same
2017-022same

正确答案

SELECT pay_month,department_id,
CASE
WHEN ROUND(AVG(amount),2)>com_amount THEN 'higher'
WHEN ROUND(AVG(amount),2)=com_amount THEN 'same'
ELSE 'lower' END comparison
FROM
(
SELECT t1.*,t2.com_amount
FROM
(SELECT employee_id,amount,DATE_FORMAT(pay_date, '%Y-%m') AS pay_month
FROM salary) AS t1
LEFT JOIN
(SELECT DATE_FORMAT(pay_date, '%Y-%m') AS pay_month, ROUND(AVG(amount),2) AS com_amount
FROM salary
GROUP BY pay_month) AS t2
ON t1.pay_month=t2.pay_month
) t3
LEFT JOIN employee AS e
ON t3.employee_id=e.employee_id
GROUP BY t3.pay_month,e.department_id
ORDER BY department_id ASC,pay_month ASC

思想

  • 先根据发工资月,计算公司的平均工资t2,连接到工资表上(这个工资表为了以月计算,所以处理为t1),连接后的表为t3。
  • t3表根据月与部门分类,并通过CASE得出新列。

注意

  • 每个月发工资的日期可能不同,DATE_FORMAT 从内层开始就需要添加。
  • 小数计算,记得添加ROUND

最后

以上就是高兴泥猴桃为你收集整理的Leetcode_615. 平均工资:部门与公司比较的全部内容,希望文章能够帮你解决Leetcode_615. 平均工资:部门与公司比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部