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