Leet
[Leet 262] Trips and Users
mintuchel
2025. 1. 15. 19:53
이 문제의 핵심은 날짜별로 GROUP BY를 한 후
해당 날짜별로 취소율을 계산해야한다는 것이다
GROUP BY를 하면 GROUP BY의 기준 칼럼만 명시 가능하고 그 외 칼럼들을 사용하지는 못한다. 사용해도 집계함수가 포함된 절을 활용해야한다. 예를 들어, SUM COUNT 같은 것들.
하지만 SUM 내에서 CASE 구문을 통해서 특정 칼럼을 활용할 수 있다는 것을 알았다.
아래에서는 집계함수인 SUM 내에서 CASE WHEN 절을 활용하여 취소된 개수를 구하고 COUNT(*)로 나눠 취소율을 구한다.'
https://leetcode.com/problems/trips-and-users/description/
WITH temp AS (
SELECT users_id
FROM Users
WHERE banned = 'No'
)
SELECT
request_at AS Day,
ROUND(
SUM(
CASE
WHEN status = 'cancelled_by_driver' OR status = 'cancelled_by_client' THEN 1
ELSE 0
END
) / COUNT(*)
, 2) AS 'Cancellation Rate'
FROM Trips AS t
WHERE client_id IN (SELECT users_id FROM temp) AND driver_id IN (SELECT users_id FROM temp)
GROUP BY request_at
HAVING request_at >= '2013-10-01' AND request_at <= '2013-10-03'
ORDER BY Day ASC