如何使用 SQL 分析员工数据

发布日期:2026-06-25 06:04:04   来源 : 杭州电子商务研究院    作者 :Ben Sullins    浏览量 :19
Ben Sullins 杭州电子商务研究院 发布日期:2026-06-25 06:04:04  
19

介绍

说到如何分析员工数据,很少有更复杂的数据结构可供使用。处理员工数据集可能带来的最大挑战在于它开始时似乎并不那么简单。让我们从人力资源信息系统 (HRIS) 中获取一个典型的员工表,看看如何对其运行一些常见的分析查询。

以下是我们数据存储的表结构。这是许多 HRIS 系统的典型结构。

我们的餐桌

表名:emps

员工编号 聘用日期 重新聘用日期 任期日期 经理编号 姓名
1 2004-06-17 1900-01-01 3000-01-01 -1 华盛顿
2 2004-07-01 1900-01-01 3000-01-01 1 亚当斯
3 2008-05-01 1900-01-01 2008-07-01 2 罗斯福
4 2007-01-01 2009-01-01 2008-01-01 3 卡特

查询

某一天 (例如 2005-07-01) 有多少人活跃?

如果我们独立回答这些问题,则以下 SQL 就足够了:

      select count(1)
from emps
where HireDate <= '2005-07-01'
and TermDate > '2005-07-01'
    

对每个日期重复此操作。但是那些被重新雇用的员工怎么办?

首先,基于这些数据,我们必须假设当一个人被重新雇用时,他们的TermDate保持不变,并且不会像他们在职时那样重置为3000-01-01。

      select count(1)
from emps
where (HireDate >= '2005-07-01'
and TermDate < '2005-07-01')
or (RehireDate >= '2005-07-01'
and (
    TermDate < '2005-07-01'
  or
    TermDate <= RehireDate
)
    

情节愈发复杂

这一切都很容易,但如果我们想要创建一个视图,显示每天活跃员工总数,以便我们可以随时间推移分析其趋势,并提出更复杂的问题,如同比增长率,该怎么办?

我们需要添加另一个只包含日期的表。在数据仓库中,我们通常将其创建为日期维度。以下是我们使用的基本结构。

表名:日期

日期
2005-01-01 1 5 2005
2005-01-02 2 5 2005
ETC...

我们将以此为起点,因为它不会受到 emp 表中当时或日期的员工状态的限制。从那里,我们将对我们的 emp 表进行左连接以获取活跃员工的数量,类似于我们上面手动执行的方式。以下是执行此操作的 SQL:

      select
DayDate, count(hires.EmployeeId) as ActiveCount
from
    dates d
-- get hires
left join
 (select 'active' as Status, * from emps) hires
on
 ( d.Date >= hires.HireDate and d.Date < hires.TermDate) -- normal active
or
  (d.Date
      between (case when hires.RehireDate = '1900-01-01' then null else hires.RehireDate end)
      and hires.TermDate)
where
  d.Date between '2004-06-17' and now() -- use the function to pull the current date here
    

唉,我们有趋势数据!

上述查询的结果将为我们提供每日活跃员工数量,以便我们了解随时间变化的趋势。当然,这只是分析员工数据的第一步,但却是一个坚实的基础,也是数据仓库中日期维度的重要性的一个很好的例子。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据