1661. Average Time of Process per Machine

최지웅·2025년 3월 6일
0

LeetCode

목록 보기
27/37

(25.03.06)

문제 이해

테이블은 Activity. 공장 웹사이트에서의 유저 활동을 보여준다. pk는 (machine_id, process_id, activity_type)이다. process_id는 machine에서 돌아가고 있는 작업의 id이다. activity_type은 ENUM으로 start, end이 있다. timestamp는 초를 나타내는 float이다. (machine_id, process_id)는 한 쌍의 start, end의 timestamp가 부여된다.)

같은 프로세스를 진행중인 머신 작업에 소요되는 평균 시간을 순서와 상관없이 계산해라.
평균 시간은 머신에서 돌아가는 프로세스의 평균 시간이다. 고로 machine_id, processing_time을 열로 가지는 테이블을 리턴하면 된다.

문제 접근

프로세스 별 start, end을 이용해서 processing_time을 계산하고, machine별로 Sum(avg)/count를 시도하면 될 것 같다.


(25.03.11)
우선 processing_time 계산하는 것 까지는 아래와 같이 구현하였다.

SELECT A1.process_id, A1.machine_id, (A2.timestamp-A1.timestamp) as processing_time
FROM Activity as A1 
JOIN Activity as A2
ON A1.process_id=A2.process_id
WHERE A1.process_id=A2.process_id and A1.machine_id=A2.machine_id 
    and A1.activity_type='start' and A2.activity_type='end';

그 뒤 machine_id별로 processing_time의 평균값을 내야하기에 GROUP BY machine_id를 수행하였다. 그리고 평균값을 내기 위해 AVG()를, 소수점 3자리에서 반올림을 하기 위하여 ROUND(num, 자리수)를 사용하였다.

SELECT A1.machine_id, ROUND(AVG(A2.timestamp-A1.timestamp), 3) as processing_time
FROM Activity as A1 
JOIN Activity as A2
ON A1.process_id=A2.process_id
WHERE A1.process_id=A2.process_id and A1.machine_id=A2.machine_id 
    and A1.activity_type='start' and A2.activity_type='end'
GROUP BY machine_id;

profile
이제 4학년!!!

0개의 댓글