02/16 SQL 문제풀이 - 1661. Average Time of Process per Machine (Leetcode)

Data Architect / Engineer·2024년 2월 16일
1

1일_1SQL

목록 보기
32/63
post-thumbnail

문제

  • LeetCode SQL 문제
  • 1661. Average Time of Process per Machine / Easy
  • 문제 내용 : [링크]


내가 작성한 Query

SELECT machine_id
    , ROUND(SUM(CASE WHEN activity_type = 'start' THEN (-1)*timestamp
                    ELSE timestamp END) / COUNT(DISTINCT process_id), 3) AS processing_time
FROM Activity
GROUP BY machine_id
  • Activity 테이블에서 각 기계별 집계데이터를 구해야 하므로, GROUP BY를 이용해 machine_id 기준으로 그룹핑 해준다.

  • average time 계산을 보면, activity_type이 'end' 일 때의 timestamp에서 activity_type이 'start'일 때의 timestamp를 빼 주고 (즉 걸린 시간을 구해주고), process_id의 개수만큼 나누어주는 것을 알 수 있다. (즉 한 process 별 걸린 시간을 구해주는 것임!)

  • SUM() 함수로 편하게 계산하기 위해, CASE WHEN THEN 구문을 사용하여 activity_type이 'start'인 경우, timestamp 값에 -1을 곱해준다. 이렇게 하면 SUM() 함수를 이용하여 편리하게 machine_id 별 걸린 시간의 합을 구할 수 있다.

  • 위에서 구한 SUM() 값을 process_id 개수 (COUNT(DISTINCT process_id)))로 나누어 processing_time을 구해준다.

  • processing time 계산을 파악했다면 쉽게 해결할 수 있는 문제.

profile
질문은 계속돼 아오에

0개의 댓글