1741-查找每个员工花费的总时间

发布时间 2023-07-11 16:38:42作者: OnlyOnYourself-Lzw

查找每个员工花费的总时间

原文地址:1741. 查找每个员工花费的总时间 - 力扣(LeetCode)

  • 题目如下所示.

个人题解

这题看上去复杂,其实还是挺简单的。以下为个人思考过程

  • -- 1. 建表
    -- 该表显示了员工在办公室的出入情况
    CREATE TABLE 1741_Employees(
    	emp_id INT,
    	event_day DATE, -- 此事件发生的事件
    	in_time INT, -- 员工进入办公室的时间
    	out_time INT, -- 员工离开办公室的时间
    	PRIMARY KEY(emp_id, event_day, in_time)
    );
    -- in_time 和 out_time 的取值仔 1到1440 之间(说明时间以分钟为单位)
    -- 题目保证同一天没有两个事件在时间上相交,并且保证 in_time 小于 out_time
    
    -- 2. 编写一个 SQL 查询以计算每位员工每天在办公室花费的总时间(以分钟为单位)。
    -- PS:在一天之内,同一员工是可以多次进入和离开办公室的。
    -- 在办公室里一次进出所花费的时间为 out_time 减去 in_time
    
    -- 首先以员工、日期分组,查看具体的情况
    SELECT
    	em.emp_id,
    	em.event_day,
    	GROUP_CONCAT(em.in_time),
    	GROUP_CONCAT(em.out_time)
    FROM 1741_Employees em 
    GROUP BY em.emp_id, em.event_day;
    
    -- 一个员工多次出入的情况下,怎么计算呢?
    -- 其实应该可以按照数学规律来计算,我们来验证一下
    -- 32 - 4 = 28, 200 - 55 = 145 , 总计为 173
    -- 200 + 32 - ( 4 + 55 ) = 173
    
    -- 那么接下来的 SQL 编写就较为简单了,如下所示
    SELECT
    	em.event_day day,
    	em.emp_id,
    	SUM(em.out_time) - SUM(em.in_time) total_time
    FROM 1741_Employees em 
    GROUP BY em.emp_id, em.event_day;