데이터 분석 기술 블로그

Average Time of Process per Machine _ Easy. leetcode 본문

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를 통해 평균값을 계산했다.