
문제
- 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 계산을 파악했다면 쉽게 해결할 수 있는 문제.
