力扣-查找每个员工花费的总时间
要解决这个问题,我们需要计算每个员工每天在办公室的总时间。让我们一步步拆解这个问题。
问题分析:
- 表格Employees记录了员工的出入办公室的时间。
- 每个记录包括员工ID、日期、进入时间和离开时间。
- 需要求每个员工在每日的总办公室时间,以分钟为单位。
解决思路:
1. 计算每个事件的时间差: 每次进入和离开的时间差就是该次事件在办公室的时间。
2. 分组汇总: 按照员工和日期分组,将每个事件的时间差相加,得到总时间。
SQL解法:
`sql
SELECT event_day AS day, emp_id, SUM(out_time - in_time) AS total_time
FROM Employees
GROUP BY event_day, emp_id;
`
解释:
- SUM(out_time - in_time):计算每个事件的时间差,然后求总和。
- GROUP BY event_day, emp_id:按日期和员工ID分组,确保每个员工每天的结果是独立的。
通过这种方法,我们可以高效地计算出每个员工每天的总办公室时间。
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。
文章目录
- 前言
- 一、题目:1741. 查找每个员工花费的总时间
- 二、解题
-
- 1.正确示范①
-
- 提交SQL
- 运行结果
- 2.正确示范②
-
- 提交SQL
- 运行结果
- 3.正确示范③
-
- 提交SQL
- 运行结果
- 4.正确示范④
-
- 提交SQL
- 运行结果
- 5.其他
- 总结
前言
一、题目:1741. 查找每个员工花费的总时间
表: Employees
+-------------+------+
| Column Name | Type |
+-------------+------+
| emp_id | int |
| event_day | date |
| in_time | int |
| out_time | int |
+-------------+------+
(emp_id, event_day, in_time) 是这个表的主键。
该表显示了员工在办公室的出入情况。
event_day 是此事件发生的日期,in_time 是员工进入办公室的时间,而 out_time 是他们离开办公室的时间。
in_time 和 out_time 的取值在1到1440之间。
题目保证同一天没有两个事件在时间上是相交的,并且保证 in_time 小于 out_time。
编写一个SQL查询以计算每位员工每天在办公室花费的总时间(以分钟为单位)。 请注意,在一天之内,同一员工是可以多次进入和离开办公室的。 在办公室里一次进出所花费的时间为out_time 减去 in_time。
返回结果表单的顺序无要求。
查询结果的格式如下:
Employees table:
+--------+------------+---------+----------+
| emp_id | event_day | in_time | out_time |
+--------+------------+---------+----------+
| 1 | 2020-11-28 | 4 | 32 |
| 1 | 2020-11-28 | 55 | 200 |
| 1 | 2020-12-03 | 1 | 42 |
| 2 | 2020-11-28 | 3 | 33 |
| 2 | 2020-12-09 | 47 | 74 |
+--------+------------+---------+----------+
Result table:
+------------+--------+------------+
| day | emp_id | total_time |
+------------+--------+------------+
| 2020-11-28 | 1 | 173 |
| 2020-11-28 | 2 | 30 |
| 2020-12-03 | 1 | 41 |
| 2020-12-09 | 2 | 27 |
+------------+--------+------------+
雇员 1 有三次进出: 有两次发生在 2020-11-28 花费的时间为 (32 - 4) + (200 - 55) = 173, 有一次发生在 2020-12-03 花费的时间为 (42 - 1) = 41。
雇员 2 有两次进出: 有一次发生在 2020-11-28 花费的时间为 (33 - 3) = 30, 有一次发生在 2020-12-09 花费的时间为 (74 - 47) = 27。
二、解题
1.正确示范①
提交SQL
select event_day day,
emp_id,
sum(out_time-in_time) total_time
from Employees
group by event_day,emp_id;
运行结果
2.正确示范②
提交SQL
select event_day day,emp_id,sum(time) total_time
from(select event_day,emp_id,out_time-in_time timefrom Employees
) u group by event_day,emp_id;
运行结果
3.正确示范③
提交SQL
select event_day day,
emp_id,
sum(out_time)-sum(in_time) total_time
from Employees
group by event_day,emp_id;
运行结果