上市集团需要的离职统计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案例相关推荐

  1. 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%

    提到IT行业,大家脑海中浮现的肯定是男性扎堆的场面.但有一个国家,从事IT行业的女性却不在少数,这个国家就是印度. 在印度,IT/ITES(信息技术支持服务)部门雇佣了近500万人,其中四分之一是女性 ...

  2. 安卓 spinner下拉框 做模糊查询_如何用一张图来做全年/去年的部门离职率动态对比...

    我们在做部门的离职率的数据分析的时候,我们希望能对比每个部门每个月的离职率,同时也希望可以对比去年同期的离职数据,同时我们还希望去年的数据对比可以进行选择,可以根据需要来呈现数据. 要实现以上的这个数 ...

  3. 106_Power Pivot之HR入离调转、在职、离职率相关指标

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 之前有帮公司HR做了些员工入离调转.在职.人工成本分析等(体量:4000人左右).在和其他朋友交流的时候得知,貌 ...

  4. 员工离职率预测,练手赛

    文章目录 1.数据探索 1.1 各特征总量及百分比 1.2 heatmap 2.特征选择&处理 2.1 特征分类 2.2 连续特征选择 2.3 分类特征选择 2.4 异常值处理 2.5 连续特 ...

  5. Logisitc Regression 预测员工离职率

    Logistic Regression 基础 Logistic Regression 沿用了 Linear Regression 的思路和想法,通过使用线性关系拟合得到真实的函数关系.同样的,如果模型 ...

  6. 上海西岸新地标!麦当劳中国新总部大楼及其旗舰餐厅同步启用;蓝领用工荒!上半年蓝领主动离职率大幅增长 | 美通社头条...

    要闻摘要:上半年蓝领主动离职率大幅增长.麦当劳中国新总部大楼及其旗舰餐厅正式启用.全球最大乐高品牌旗舰店于广州开业.<长津湖>国庆档力破8项IMAX纪录.高通45亿美元收购自动驾驶公司维宁 ...

  7. 华为给博士毕业生开出天价年薪!为何博士级员工离职率依旧高达21.8%

    昨日(7月23日),网络盛传一张华为总裁办电子邮件的截图.截图显示,华为已制定2019届顶尖学生年薪制方案:8位2019届应届博士生年薪89.6万起,其中最高的达到了201万. 华为:从全世界招募天才 ...

  8. 某多多买菜程序员:最长持续工作时间高达30小时!睁眼就工作,闭眼就睡觉!多多买菜离职率超级高!公司不得不降低门槛持续招人!...

    拼多多的买菜业务上线以后一直争议不断,出现了诸如工作强度过高.强制要求员工转岗等热议话题,那么多多买菜的工作现状到底是怎么样? 一个拼多多员工发帖爆料:和去买菜的同事聊了下,他们最长的持续工作时间达到 ...

  9. 实时数仓入门训练营:实时计算 Flink 版 SQL 实践

    简介:<实时数仓入门训练营>由阿里云研究员王峰.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打 ...

  10. 团队管理(3)---有效降低企业员工离职率

    有效降低企业员工离职率 招人难!居高不下的员工离职率,更使企业招聘难上加难!近年来,楚柳香小编很多HR朋友都在抱怨公司员工离职率过高的问题.过高的员工流失率,使许多企业都处在招聘--流失--再招聘-- ...

最新文章

  1. POJ-1182 食物链(并查集)
  2. 利用svn自动同步更新到网站服务器 -- 网摘
  3. 为什么站点实现了https加密之后还是能看到相关数据
  4. 基于机器学习的捡球机器人设计与实现(探索)第6篇——另一种高效追踪网球思路
  5. servlet获取相对路径 绝对路径
  6. 手把手带你入门加密算法的Python实现
  7. 离散信号频谱matlab代码,离散信号MATLAB频谱分析程序
  8. 实现位数超过32bit的整数的加减乘除运算_Java 运算符
  9. jquery------导入jquery.2.2.3.min.js
  10. ‘catkin_make‘ is currently not installed问题修复
  11. C语言scanf函数详细解释
  12. su联合推拉使用方法_12个最实用的SU建模技巧
  13. 终端数据防泄漏解决方案
  14. 弱口令是什么?有哪些注意事项?
  15. 流程图设计入门指南 —— 以 Draw.io 为例
  16. python打开文件对话框
  17. 谷歌日历添加中国节假日
  18. Polygon zkEVM中Goldilocks域元素circom约束
  19. 【Linux】基本系统维护命令
  20. Mysql数据库的主从复制

热门文章

  1. python中dispatch_在django,dispatch的用途是什么?
  2. java编写平行四边形的代码_CSS 实现平行四边形的示例代码
  3. OS福利部落iOS15绕过激活工具,支持最新iOS15.5绕过
  4. html中3d图片轮播图,js实现图片3D轮播效果
  5. Medium之1468.计算税后工资
  6. 炉石传说 android,炉石传说安卓版
  7. 365天英语口语大全
  8. hardhat 教程及 hardhat-deploy 插件使用
  9. java模板方法模式_Java设计模式之模板方法模式
  10. 奉子成婚,永远不可能成为潮流