SQL/문제풀이
Average Time of Process per Machine _ Easy. leetcode
데이터분석가 이채은
2024. 9. 24. 09:00
SELECT
A1.machine_id,
ROUND(AVG(A2.timestamp - A1.timestamp), 3) AS processing_time
FROM Activity A1
INNER JOIN Activity A2
ON
A1.machine_id = A2.machine_id
AND
A1.process_id = A2.process_id
WHERE
A1.activity_type = 'start'
AND
A2.activity_type = 'end'
GROUP BY
A1.machine_id;
Solution
SELECT
A1.machine_id,
ROUND(AVG(A2.timestamp - A1.timestamp), 3) AS processing_time
FROM Activity A1
INNER JOIN Activity A2
ON
A1.machine_id = A2.machine_id
AND
A1.process_id = A2.process_id
WHERE
A1.activity_type = 'start'
AND
A2.activity_type = 'end'
GROUP BY
A1.machine_id;
생각보다 복잡했지만 차근차근 정리해 보면 다음과 같다:
- 먼저 A1의 테이블에는 start만, A2의 테이블에는 end만 추출해서 JOIN을 해야겠다고 생각했다.
- machine_id와 process_id가 같은 것 끼리 모아야 하므로 JOIN 조건으로 두 개의 테이블에서 각각 id가 같도록 JOIN 한다.
- 'end' timestamp - 'start' timestamp를 계산하면 다음과 같이 나온다:
- 그다음 machine_id끼리 GROUP BY를 하고 AVG를 통해 평균값을 계산했다.