Trips and Users - LeetCode
Can you solve this real interview question? Trips and Users - Table: Trips +-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at |
leetcode.com
문제) 취소율은 금지되지 않은 사용자가 있는 취소된(클라이언트별 또는 드라이버별) 요청의 수를 해당일의 금지되지 않은 사용자가 있는 요청의 총 수로 나누어 계산됩니다. "2013-10-01"에서 "2013-10-03" 사이의 금지되지 않은 사용자(클라이언트와 드라이버 모두 금지되지 않아야 함)가 있는 요청의 취소율을 찾기 위한 솔루션을 매일 작성하십시오. (소수점 두 개까지) 순서에 상관없이 결과 테이블을 반환합니다.
답)
SELECT request_at Day
, ROUND(COUNT(CASE WHEN status <> 'completed' THEN id END) / COUNT(id), 2) 'Cancellation Rate'
FROM trips
WHERE request_at BETWEEN '2013-10-01' AND '2013-10-03'
AND client_id IN (SELECT users_id
FROM users
WHERE banned = 'No')
AND driver_id IN (SELECT users_id
FROM users
WHERE banned = 'No')
GROUP BY request_at
개념정리
1. 원하는 기간의 결과를 구하기 위해 BETWEEN A AND B 사용
2. banned된 사용자는 집계에서 제외하기 위해 다중행 서브쿼리를 사용
➡️ users 테이블에서 banned가 NO인 사용자의 users_id를 구하고, 해당 id가 trips 테이블의 client_id, driver_id에 banned가 안된 인원만 집계
3. 취소율을 구하기 위해 (status가 completed가 아닌 id의 수 / 전체 id의 수)를 해준 후 소수점 자리를 맞추어주기 위해 ROUND 사용
📍본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
'[코딩 테스트] > SQL 코딩 테스트' 카테고리의 다른 글
[프로그래머스 SQL] 조건에 맞는 사용자 정보 조회하기 (1) | 2024.10.04 |
---|---|
[프로그래머스 SQL] 식품분류별 가장 비싼 식품의 정보 조회하기 (1) | 2024.09.30 |
[프로그래머스 SQL] 있었는데요 없었습니다 (1) | 2024.09.28 |
[프로그래머스 SQL] 물고기 종류별 대어 찾기 (3) | 2024.09.27 |
[LeetCode] 550. Game Play Analysis IV (0) | 2024.02.16 |
댓글