imhamburger 님의 블로그

Leetcode - Trips and Users 문제풀이 본문

Mysql

Leetcode - Trips and Users 문제풀이

imhamburger 2025. 12. 14. 22:37

문제

주어진 택시 요청(trip) 데이터에서 취소율(Cancellation Rate)을 계산하려고 한다.

 

1. 취소율 정의
취소율은 다음과 같이 계산한다.

 

취소된 요청 수:
해당 날짜에 발생한 요청 중 요청 상태(status)가 cancelled_by_client 또는 cancelled_by_driver 이고 클라이언트와 드라이버 모두 차단(banned)되지 않은 요청 수

전체 요청 수:
해당 날짜에 발생한 요청 중 클라이언트와 드라이버 모두 차단되지 않은 전체 요청 수

 

2. 조건

  • 클라이언트와 드라이버 모두 unbanned (banned = 'No') 인 요청만 고려
  • 날짜 범위는 2013-10-01 ~ 2013-10-03
  • 해당 날짜에 최소 1건 이상의 요청이 있는 날만 결과에 포함
  • 취소율은 소수점 둘째 자리까지 반올림

문제출처: https://leetcode.com/problems/trips-and-users/

 

 

내가 푼 풀이

SELECT request_at AS "Day",
        ROUND(COUNT(CASE WHEN status != 'completed' THEN id END) / COUNT(id), 2) AS "Cancellation Rate"
FROM Trips
WHERE client_id NOT IN (
    SELECT users_id
    FROM Users
    WHERE banned = 'YES'
)
AND driver_id NOT IN (
    SELECT users_id
    FROM Users
    WHERE banned = 'YES'
)
AND request_at BETWEEN "2013-10-01" AND "2013-10-03"
GROUP BY request_at
  • 차단되지 않은 사용자들 간의 요청만 필터링
  • 날짜별 전체 요청 대비 취소 요청 비율 계산

 

해당문제는 Hard 레벨이긴 했는데 체감상 Medium 정도? 였다.

올바른 조건추가와 취소율 계산만 잘 해주면 되는 문제!