Image

Easy 🔗1741. Find Total Time Spent by Each Employee

📝문제 요약

Table: Employees

+-------------+------+
| Column Name | Type |
+-------------+------+
| emp_id      | int  |
| event_day   | date |
| in_time     | int  |
| out_time    | int  |
+-------------+------+
(emp_id, event_day, in_time) is the primary key (combinations of columns with unique values) of this table.
The table shows the employees' entries and exits in an office.
event_day is the day at which this event happened, in_time is the minute at which the employee entered the office, and out_time is the minute at which they left the office.
in_time and out_time are between 1 and 1440.
It is guaranteed that no two events on the same day intersect in time, and in_time < out_time.

Write a solution to calculate the total time in minutes spent by each employee on each day at the office. Note that within one day, an employee can enter and leave more than once. The time spent in the office for a single entry is out_time - in_time.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:
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       |
+--------+------------+---------+----------+
Output:
+------------+--------+------------+
| 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         |
+------------+--------+------------+
Explanation:
Employee 1 has three events: two on day 2020-11-28 with a total of (32 - 4) + (200 - 55) = 173, and one on day 2020-12-03 with a total of (42 - 1) = 41.
Employee 2 has two events: one on day 2020-11-28 with a total of (33 - 3) = 30, and one on day 2020-12-09 with a total of (74 - 47) = 27.


✏️문제 풀이

SELECT

SELECT event_day AS day, emp_id, SUM(out_time - in_time) AS total_time
  • day
    • event_day : 날짜
  • emp_id : 직원의 ID
  • total_time : 사무실에 머무는 시간
    • out_time - in_time : 사무실에 머무르는 시간을 계산(나간 시간 - 들어온 시간)
    • SUM(…) : 직원이 두번 이상 들어올 경우 머무르는 시간의 총합을 계산

FROM

FROM Employees
  • Employees 테이블의 데이터를 사용

GROUP BY

GROUP BY 1, 2
  • 1번 컬럼(day)과 2번 컬럼(emp_id)을 기준으로 그룹화
    • 같은 날 한명의 직원이 두 번 이상 출입할 수 있으므로 두 개의 컬럼을 기준으로 그룹화


💯제출 코드

SELECT event_day AS day, emp_id, SUM(out_time - in_time) AS total_time
FROM Employees
GROUP BY 1, 2

댓글남기기