Leetcode MYSQL - 262 (Hard)

Pocketopi·2025년 5월 8일

[MYSQL] Leetcode

목록 보기
30/34
post-thumbnail

🔔 문제

밴 당하지 않은 유저 중 2013년 10월 1일부터 2013년 10월 3일까지 취소율을 구하라.
[Trip and users]

🎯 풀이 전략

🔑 핵심 포인트

CTE를 사용하여 밴 당한 유저들을 모두 제외하고, 10월 1일부터 3일까지의 데이터만 남겼다.
그 이후 CTE 테이블을 이용하여 취소율을 구하였다.

💻 정답 쿼리 예시

WITH CTE AS (
    SELECT *
    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')

SELECT REQUEST_AT AS DAY,
    ROUND(IFNULL(SUM(CASE WHEN STATUS LIKE 'CANCELLED%' THEN 1 ELSE 0 END), 0)
    / NULLIF(COUNT(*), 0), 2) AS 'CANCELLATION RATE'
FROM CTE
GROUP BY REQUEST_AT;

💡 핵심문법 및 배운 점

  • WITH
  • NULLIF(A,B) : A,B가 같으면 NULL 아니면, A를 반환
  • IFNULL(A,B) : A가 NULL이면 B반환 아니면, A를 반환

⏱️ 걸린 시간: 27분 23초

profile
통계학/컴퓨터공학 전공 4학년 학생 DA뿌수기 일기장

1개의 댓글

comment-user-thumbnail
2025년 5월 10일

쿼리 30분은 상상이 안 가네

답글 달기