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