문제
출처: 리트코드
취소율은 당일 금지되지 않은 사용자의 취소된 요청 수(클라이언트 또는 드라이버별)를 금지되지 않은 사용자의 총 요청 수로 나누어 계산합니다.
매일 “2013-10-01″과 “2013-10-03” 사이에 잠금 해제된 사용자(클라이언트와 드라이버가 모두 잠기지 않아야 함)가 있는 요청의 취소 비율을 찾는 SQL 쿼리를 작성하십시오. 취소율은 소수점 둘째 자리에서 반올림하십시오.
임의의 순서로 결과 테이블을 반환합니다.
제출(MySQL)
WITH users_ubnd AS (
SELECT users_id
FROM users
WHERE banned = 'No'
),
oct_1_thru_3 AS (
SELECT
request_at,
CASE WHEN status REGEXP'^cancelled' THEN 1
ELSE 0 END AS cancellation
FROM
trips
WHERE
client_id IN (SELECT users_id FROM users_ubnd)
AND
driver_id IN (SELECT users_id FROM users_ubnd)
AND
request_at BETWEEN '2013-10-01' AND '2013-10-03'
)
SELECT
request_at AS Day,
ROUND(
AVG(cancellation), 2
) AS 'Cancellation Rate'
FROM oct_1_thru_3
GROUP BY request_at
솔루션(MySQL)
더보기
전략
>> CTE에서 다음 데이터 수집
A. 잠금 해제된 사용자 ID 목록
나. 2013년 10월 1일부터 2013년 10월 3일까지 운행 금지되지 않은 고객 및 운전자의 운행 데이터
– b점은 ID와 취소 여부를 이진화하여 확률을 쉽게 계산할 수 있습니다.
(취소는 1, 취소는 0)
WITH users_ubnd AS (
SELECT users_id
FROM users
WHERE banned = 'No'
),
oct_1_thru_3 AS (
SELECT
request_at,
CASE WHEN status REGEXP'^cancelled' THEN 1
ELSE 0 END AS cancellation
FROM
trips
WHERE
client_id IN (SELECT users_id FROM users_ubnd)
AND
driver_id IN (SELECT users_id FROM users_ubnd)
AND
request_at BETWEEN '2013-10-01' AND '2013-10-03'
)
oct_1_thru_3 날짜별로 그룹핑 후 평균 취소 여부 계산
SELECT
request_at AS Day,
ROUND(
AVG(cancellation), 2
) AS 'Cancellation Rate'
FROM oct_1_thru_3
GROUP BY request_at