上市集团计算离职率sql案例
上市集团需要的离职统计sql案例
- 1.需求:
- 2.条件:
- 1.实现月份分组
- 2.实现离职人数查询:
- 3.实现期末人数:
- 4.实现期初人数:
- 5.实现离职率:
- 3.正文:
- 4.总结:
1.需求:
不知名集团2021年上半年离职统计明细表
2021年1-6月份离职统计
序号 | 月份 | 离职人数 | 期初人数 | 期末人数 | 离职率 |
---|---|---|---|---|---|
1 | 1 | 11 | 1211 | 1217 | 0.90% |
2 | 2 | 10 | 1217 | 1228 | 0.81% |
3 | 3 | 12 | 1228 | 1245 | 0.95% |
4 | 4 | 23 | 1245 | 1249 | 1.81% |
5 | 5 | 26 | 1249 | 1242 | 2.05% |
6 | 6 | 13 | 1242 | 1248 | 1.03% |
合计(1-6月) | 95 | 7392 | 7429 | 7.07% |
2.条件:
离职率:本月离职人数/部门月末人数+本月离职人数
表:员工表 (hr_staff_person_info)
分析:
1.实现月份分组
涉及函数:
convert: 根据日期格式拆分为2021-02格式,然后用group by 分开
fd_entry_time between '2021-02-01' and '2021-05-01' group by convert(varchar(7),fd_entry_time,120)
2.实现离职人数查询:
涉及函数:
between and:在日期区间
count:计数
select count(fd_id)as A,convert(varchar(7),fd_leave_time,120) as 日期 from hr_staff_person_info where fd_status='leave' and fd_leave_time between '2021-02-01' and '2021-04-01'
3.实现期末人数:
涉及函数:
top (100) percent:用于解决order by 查询的数据为表(实际是将游标变成表)
ROW_NUMBER() OVER (ORDER BY t.c ASC) AS id:用于增加一个递增的id,进行表之间的连接
select count(fd_id) as B from hr_staff_person_info where fd_status='official'and fd_entry_time <= '2021-04-01'
上面是单个月实现期末人数,但是实际要复杂一些:需要对人数进行月份分组,并且完成不同月份下期末人数的查询,实现的步骤如下:
1.实现月份分组
2.然后找一个时间点查询出当前时间之前入职(例子:查询2021-01日期之前的人数)
3.然后找到每个月入职的人数(例如:2021.01实现入职10人,2021.01-2021.02实现入职20人)
4.每个月入职人数实现累计(例如2021.01人数为10,2021.02人数为30人,即1月增长人数和2月增长人数之和)
5.每个月月末人数(每个月累计的人数和时间点查询人数之后)
例如:2021.01期末人数为:2021.01查询的人数+2021.01累计增长的10人;
例如:2021.02期末人数为:【2021.01查询人数+(2021.01入职人数+2021.02入职人数)即每个月入职人数累计】
4.实现期初人数:
实现了期末人数,期初人数就比较容易做了(但是不容易想到)
1.期末人数-每个月入职的人数即使每个月月初人数
5.实现离职率:
涉及函数:
round:保留小数,四舍五入
cast:将数字变成其他类型
concat:将数字和%进行拼接
case when 0 zhen 1 else:进行除零错误
concat(round(CAST(A as float)*100/case when ((CAST(B as float)+CAST(A as float)))=0 then 1 else ((CAST(B as float)+CAST(A as float)))end,2),'%' ) as 离职率
3.正文:
这里是完整的sql查询:
select b2.序号,b2.日期,b1.离职人数 ,b2.期末人数 ,b2.期初人数,concat(round(CAST(b1.离职人数 as float)*100/(CAST(b2.期末人数 as float)+CAST(b1.离职人数 as float)),2),'%')as 离职率 from (select 日期, A as 离职人数 ,B as 期末人数,concat(round(CAST(A as float)*100/(CAST(B as float)+CAST(A as float)),2),'%')as 离职率 from(select ROW_NUMBER() OVER (ORDER BY t.c ASC) AS id,t.* from (select count(fd_id)as C from hr_staff_person_info where fd_status='official'and fd_entry_time<'2021-04-01')as t)a1, (select ROW_NUMBER() OVER (ORDER BY m.b ASC) AS id,m.* from ( select count(fd_id) as B from hr_staff_person_info where fd_status='official'and fd_entry_time <= '2021-04-01' )as m)a2,(select ROW_NUMBER() OVER (ORDER BY p.a ASC) AS id,p.* from (select count(fd_id)as A,convert(varchar(7),fd_leave_time,120) as 日期 from hr_staff_person_info where fd_status='leave' and fd_leave_time between '2021-02-01' and '2021-04-01' group by convert(varchar(7),fd_leave_time,120))as p)a3where a1.id=a2.id) b1,(select n.序号,n.日期,n.期末人数,n.期末人数-x.B 期初人数 from (select 序号,日期,(select sum(h.B) from (select top (100) percent ROW_NUMBER() OVER (ORDER BY g.日期 ASC) AS 序号,* from (select top (100) percent y.id ,日期 ,人数+B 期末的人数 ,人数 ,B from (select top (100) percent ROW_NUMBER() OVER (ORDER BY u.人数 ASC) AS id,u.* from ( select count(fd_id) as 人数 from hr_staff_person_info where fd_status='official'and fd_entry_time < '2021-02-01' )as u)as k,(select top (100) percent ROW_NUMBER() OVER (ORDER BY m.b ASC) AS id,m.* from ( select count(fd_id) as B,convert(varchar(7),fd_entry_time,120) as 日期 from hr_staff_person_info where fd_status='official'and fd_entry_time between '2021-02-01' and '2021-05-01' group by convert(varchar(7),fd_entry_time,120) )as m)y)gorder by g.日期)hwhere 序号<=r.序号 )+人数 期末人数from (select top (100) percent ROW_NUMBER() OVER (ORDER BY g.日期 ASC) AS 序号,* from (select top (100) percent y.id ,日期 ,人数+B 期末人数 ,人数 ,B from (select top (100) percent ROW_NUMBER() OVER (ORDER BY u.人数 ASC) AS id,u.* from ( select count(fd_id) as 人数 from hr_staff_person_info where fd_status='official'and fd_entry_time < '2021-02-01' )as u)as k,(select top (100) percent ROW_NUMBER() OVER (ORDER BY m.b ASC) AS id,m.* from ( select count(fd_id) as B,convert(varchar(7),fd_entry_time,120) as 日期 from hr_staff_person_info where fd_status='official'and fd_entry_time between '2021-02-01' and '2021-05-01' group by convert(varchar(7),fd_entry_time,120) )as m)y)gorder by g.日期)r)n,(select top (100) percent ROW_NUMBER() OVER (ORDER BY g.日期 ASC) AS 序号,B from (select top (100) percent y.id ,日期 ,人数+B 期末的人数 ,人数 ,B from (select top (100) percent ROW_NUMBER() OVER (ORDER BY u.人数 ASC) AS id,u.* from ( select count(fd_id) as 人数 from hr_staff_person_info where fd_status='official'and fd_entry_time < '2021-02-01' )as u)as k,(select top (100) percent ROW_NUMBER() OVER (ORDER BY m.b ASC) AS id,m.* from ( select count(fd_id) as B,convert(varchar(7),fd_entry_time,120) as 日期 from hr_staff_person_info where fd_status='official'and fd_entry_time between '2021-02-01' and '2021-05-01' group by convert(varchar(7),fd_entry_time,120) )as m)y)g)xwhere n.序号=x.序号)b2where b1.日期=b2.日期
验证如下:
4.总结:
这是一个实际的上市公司sql案例,主要难度在于思考期初人数和期末人数,如果先做期初人数可能会走很多弯路,这是我自己的一个实现方式,如果大家有更好的思路,也请大家评论留言,共同进步
上市集团计算离职率sql案例相关推荐
- 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%
提到IT行业,大家脑海中浮现的肯定是男性扎堆的场面.但有一个国家,从事IT行业的女性却不在少数,这个国家就是印度. 在印度,IT/ITES(信息技术支持服务)部门雇佣了近500万人,其中四分之一是女性 ...
- 安卓 spinner下拉框 做模糊查询_如何用一张图来做全年/去年的部门离职率动态对比...
我们在做部门的离职率的数据分析的时候,我们希望能对比每个部门每个月的离职率,同时也希望可以对比去年同期的离职数据,同时我们还希望去年的数据对比可以进行选择,可以根据需要来呈现数据. 要实现以上的这个数 ...
- 106_Power Pivot之HR入离调转、在职、离职率相关指标
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 之前有帮公司HR做了些员工入离调转.在职.人工成本分析等(体量:4000人左右).在和其他朋友交流的时候得知,貌 ...
- 员工离职率预测,练手赛
文章目录 1.数据探索 1.1 各特征总量及百分比 1.2 heatmap 2.特征选择&处理 2.1 特征分类 2.2 连续特征选择 2.3 分类特征选择 2.4 异常值处理 2.5 连续特 ...
- Logisitc Regression 预测员工离职率
Logistic Regression 基础 Logistic Regression 沿用了 Linear Regression 的思路和想法,通过使用线性关系拟合得到真实的函数关系.同样的,如果模型 ...
- 上海西岸新地标!麦当劳中国新总部大楼及其旗舰餐厅同步启用;蓝领用工荒!上半年蓝领主动离职率大幅增长 | 美通社头条...
要闻摘要:上半年蓝领主动离职率大幅增长.麦当劳中国新总部大楼及其旗舰餐厅正式启用.全球最大乐高品牌旗舰店于广州开业.<长津湖>国庆档力破8项IMAX纪录.高通45亿美元收购自动驾驶公司维宁 ...
- 华为给博士毕业生开出天价年薪!为何博士级员工离职率依旧高达21.8%
昨日(7月23日),网络盛传一张华为总裁办电子邮件的截图.截图显示,华为已制定2019届顶尖学生年薪制方案:8位2019届应届博士生年薪89.6万起,其中最高的达到了201万. 华为:从全世界招募天才 ...
- 某多多买菜程序员:最长持续工作时间高达30小时!睁眼就工作,闭眼就睡觉!多多买菜离职率超级高!公司不得不降低门槛持续招人!...
拼多多的买菜业务上线以后一直争议不断,出现了诸如工作强度过高.强制要求员工转岗等热议话题,那么多多买菜的工作现状到底是怎么样? 一个拼多多员工发帖爆料:和去买菜的同事聊了下,他们最长的持续工作时间达到 ...
- 实时数仓入门训练营:实时计算 Flink 版 SQL 实践
简介:<实时数仓入门训练营>由阿里云研究员王峰.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打 ...
- 团队管理(3)---有效降低企业员工离职率
有效降低企业员工离职率 招人难!居高不下的员工离职率,更使企业招聘难上加难!近年来,楚柳香小编很多HR朋友都在抱怨公司员工离职率过高的问题.过高的员工流失率,使许多企业都处在招聘--流失--再招聘-- ...
最新文章
- POJ-1182 食物链(并查集)
- 利用svn自动同步更新到网站服务器 -- 网摘
- 为什么站点实现了https加密之后还是能看到相关数据
- 基于机器学习的捡球机器人设计与实现(探索)第6篇——另一种高效追踪网球思路
- servlet获取相对路径 绝对路径
- 手把手带你入门加密算法的Python实现
- 离散信号频谱matlab代码,离散信号MATLAB频谱分析程序
- 实现位数超过32bit的整数的加减乘除运算_Java 运算符
- jquery------导入jquery.2.2.3.min.js
- ‘catkin_make‘ is currently not installed问题修复
- C语言scanf函数详细解释
- su联合推拉使用方法_12个最实用的SU建模技巧
- 终端数据防泄漏解决方案
- 弱口令是什么?有哪些注意事项?
- 流程图设计入门指南 —— 以 Draw.io 为例
- python打开文件对话框
- 谷歌日历添加中国节假日
- Polygon zkEVM中Goldilocks域元素circom约束
- 【Linux】基本系统维护命令
- Mysql数据库的主从复制
热门文章
- python中dispatch_在django,dispatch的用途是什么?
- java编写平行四边形的代码_CSS 实现平行四边形的示例代码
- OS福利部落iOS15绕过激活工具,支持最新iOS15.5绕过
- html中3d图片轮播图,js实现图片3D轮播效果
- Medium之1468.计算税后工资
- 炉石传说 android,炉石传说安卓版
- 365天英语口语大全
- hardhat 教程及 hardhat-deploy 插件使用
- java模板方法模式_Java设计模式之模板方法模式
- 奉子成婚,永远不可能成为潮流