公司裁员,码农竟然成了“帮凶”?(剧情杜撰)

分类:Java

某公司经营不善,管理层决定进行降本增效,换句话说,就是裁员,于是,公司的经理来到了人力资源部:

“小张,公司要裁员,请你给我拟一个裁员名单。”

“经理,需要裁掉哪些员工?”

“是这样的,公司主要是想降低成本,所以需要把工资高于本部门平均工资的员工优化一下。”

小张听了,有点茫然不知所措,毕竟,这样的名单统计需求,自己从来没有做过。慌乱之中,她突然想起跟自己关系不错的程序员阿丘,他工作能力很强,特别是一些与数据相关的工作,是非常擅长的领域。

小张马上来到技术部,低头与阿丘耳语了一番,阿丘点了点头,不就是一条sql的事吗?
“塞口?啥意思?”
“你不用管了,下午就给你名单。”

阿丘连到数据库,梳理了一下表结构和数据(只摘取关键部分):
CREATE TABLE `t_employee` (
  `id` int(11NOT NULL AUTO_INCREMENT COMMENT '主键',
  `emp_name` varchar(32NOT NULL COMMENT '姓名',
  `dept_id` int(11NOT NULL COMMENT '部门id',
  `salary` decimal(11,2NOT NULL COMMENT '薪资',
  `hire_date` timestamp NULL DEFAULT NULL COMMENT '入职时间',
  PRIMARY KEY (`id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_employee` VALUES ('1''李嘉薪''1''12000.00''2023-09-08 19:37:19');
INSERT INTO `t_employee` VALUES ('2''张升直''1''23000.00''2023-09-08 19:37:52');
INSERT INTO `t_employee` VALUES ('3''子由''2''5000.00''2023-09-08 19:38:18');
INSERT INTO `t_employee` VALUES ('4''承路''2''6000.00''2023-09-08 19:38:44');
INSERT INTO `t_employee` VALUES ('5''记建''2''6800.00''2023-09-08 19:39:14');
INSERT INTO `t_employee` VALUES ('6''时面''2''7200.00''2023-09-08 19:40:23');
INSERT INTO `t_employee` VALUES ('7''赵钱多''1''19000.00''2023-09-08 19:40:56');
INSERT INTO `t_employee` VALUES ('8''孙肃然''1''21800.00''2023-09-08 19:41:30');
阿丘看了看数据,很快就了解决办法:要把高于部门平均工资的人员找出来,那就按照部门id进行分组,就可以求出该部门的平均工资,然后与雇员表进行关联,关联条件就是大于平均工资的雇员,sql如下:
SELECT e.id,e.emp_name,e.dept_id,e.salary,g.avg_salary FROM t_employee e, 
 (SELECT dept_id, AVG(salary) avg_salary FROM t_employee GROUP BY dept_id) g
WHERE e.dept_id=g.dept_id AND e.salary>g.avg_salary
ORDER BY dept_id
执行结果如下:

公司裁员,码农竟然成了“帮凶”?(剧情杜撰)

阿丘检查了一下结果,没问题,符合要求,他马上来到了人力资源部,小张没想到这么快就查询出了名单,不禁心花怒放,她张笑靥如花地直奔经理的办公室。经理看了看名单,陷入了沉思,公司要降本增效没错,把工资高于部门平均工资的人员“砍掉”,也非常合乎逻辑,不过,名单上面的人,有些工作非常努力,产出也非常可观,如果把这些人也裁掉,公司后续的经营和发展可能就会陷入困境。经理又想了想:
“这个名单可能也不是特别符合实际情况,像赵钱多,过去三年的绩效都非常好,无论如何都不能裁掉,所以,还需要把那种表现好的员工留下,即使他的工资偏高。”
“那具体应该有哪些条件?”

“把工资高于部门平均工资、且去年绩效不是A的员工裁掉。”

小张只好再次来找阿丘。
生性乐观、脾气温和的阿丘依然热心地帮忙:

“这个好办,安排。”

绩效表的结果和数据较为简单:
CREATE TABLE `t_performance` (
  `id` int(11NOT NULL AUTO_INCREMENT COMMENT '主键',
  `emp_id` int(11NOT NULL COMMENT '员工id',
  `result` varchar(10DEFAULT NULL COMMENT '绩效',
  `year` int(4DEFAULT NULL,
  PRIMARY KEY (`id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_performance` VALUES ('1''2''B''2022');
INSERT INTO `t_performance` VALUES ('2''7''A''2022');
INSERT INTO `t_performance` VALUES ('3''8''A''2022');
INSERT INTO `t_performance` VALUES ('4''5''B''2022');
INSERT INTO `t_performance` VALUES ('5''6''A''2022');
基于上面的sql,再关联绩效表,把去掉绩效不是A的选出来:
SELECT e.id,e.emp_name,e.dept_id,e.salary,g.avg_salary FROM t_employee e, 
 (SELECT dept_id, AVG(salary) avg_salary FROM t_employee GROUP BY dept_id) g
WHERE e.dept_id=g.dept_id AND e.salary>g.avg_salary AND 
EXISTS (select id from t_performance p 
 where p.year+1=year(now()) AND e.id=p.emp_id and p.result!='A')
ORDER BY dept_id
结果如下:

公司裁员,码农竟然成了“帮凶”?(剧情杜撰)

这正是经理想要的,去年这两个人的表现就不太好,工资还高,不裁他们裁谁?经理欣赏地看着小张:

“厉害,技能很全面啊。晚上请你吃饭!”

小张转告了阿丘,也很感谢他的帮忙。

阿丘没有很高兴的样子,反倒有点不安,未曾想,公司裁员,自己竟然成了“帮凶”!


以上故事纯属杜撰,主要是想讲解类似场景的sql写法,请勿对号入座,谢谢!


都看到这里了,请帮忙一键三连啊,也就是点击文末的在看、点赞、分享,这样会让我的文章让更多人看到,也会大大地激励我进行更多的输出,谢谢!


推荐阅读:

删除重复记录但保留其中一行数据的sql写法

一条sql搞定这个需求,面试官直呼内行

MySQL如何进行表之间的关联更新

高频面试题:多线程顺序打印ABC字符20次

一网打尽:MySQL索引失效的场景大搜罗

这个设计模式的用法,一般人我不告诉他

原文始发于微信公众号(互联网全栈架构):公司裁员,码农竟然成了“帮凶”?(剧情杜撰)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/173635.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!