728x90
오늘 포스팅 할 내용은 LeetCode에서 Trips and Users문제를 풀어봤습니다.
1. 문제 설명
2. 문제 예시
3. 문제 풀이
이번 문제는 driver_id와 client_id만 잘 구분해주면 된다.
말 그대로 cancel의 확률을 구하면 되는데 사용자 중 banned가 yes라면 제외한 확률을 구해주면 된다.
그래서 날짜별로 평균값을 구해주면 되는 문제이다.
/**
* LeetCode : Trips and Users
* URL :https://leetcode.com/problems/trips-and-users/
*/
/*
* AVG 사용
*/
select trip_totals.day,
,round(avg(trip_totals.status like '%cancel%'), 2) as "Cancellation Rate"
from (
select trips.request_at as day
,trips.status
from Trips trips, Users clients, Users drivers
where trips.request_at between '2013-10-01' and '2013-10-03'
and (clients.users_id = trips.client_id and clients.banned = 'No')
and (drivers.users_id = trips.driver_id and drivers.banned = 'No')
) trip_totals
group by day
/*
* join 사용
*/
select trip_totals.day,
round(avg(trip_totals.status like '%cancel%'), 2) as "Cancellation Rate"
from (
select trips.request_at as day
,trips.status
from Trips trips
left join Users clients
on clients.users_id = trips.client_id
left join Users drivers
on drivers.users_id = trips.driver_id
where trips.request_at between '2013-10-01' and '2013-10-03'
and clients.banned = 'No'
and drivers.banned = 'No'
) trip_totals
group by day
코드는 위와 같이 풀었다.
join을 이용해도 좋고 테이블을 여러개 합쳐도 무관하다.
그리고 like를 사용하지 않는 경우라면 trip_totals.status != "completed" 로 조건을 변경해주면 된다.
4. 결과
5. GitHub Code
이번 포스팅도 LeetCode에 있는 문제를 풀어봤습니다.
다음에도 유익한 포스팅과 정보로 찾아오겠습니다.
728x90
'Algorithm > leetCode' 카테고리의 다른 글
[세무민의 코딩일기] LeetCode Exchange Seats 문제풀이 (0) | 2022.02.11 |
---|---|
[세무민의 코딩일기] LeetCode Rising Temperature문제풀이 (0) | 2022.01.13 |
[세무민의 코딩일기] LeetCode Duplicate Emails 문제풀이 (0) | 2022.01.11 |
[세무민의 코딩일기] LeetCode Second Highest Salary 문제풀이 (0) | 2022.01.09 |
[세무민의 코딩일기] LeetCode Nth Highest Salary 문제풀이 (0) | 2022.01.08 |