문제들이 점점 복잡해지는 것 같다..!
문제 설명 번역
고객이 선호하는 배송 날짜가 주문 날짜와 같으면 주문을 즉시라고 합니다. 그렇지 않으면 예약됨이라고 합니다.
고객의 첫 번째 주문은 고객의 주문 날짜가 가장 빠른 주문입니다. 고객이 정확히 하나의 첫 번째 주문을 가지고 있음을 보장합니다.
모든 고객의 첫 번째 주문에서 즉시 주문의 비율을 소수점 이하 2자리로 반올림하여 구하는 솔루션을 작성합니다.
![]()
첫 주문 날짜와 배송 날짜가 같으면 즉시 배송이 되는 것임. 첫 주문에 즉시배송이 당첨되기 어려운건지 첫주문에 즉시배송이 걸린 소비자의 비율을 구하는 문제였다.
핵심 키워드는 첫 주문일자 찾기, 첫주문만 가지고 비율 구하기!#주문 날짜와 배송날짜가 같을 때 백분율로 바꾸고 소숫점 두번째 자리까지 반올림! select ROUND(avg(order_date = customer_pref_delivery_date)*100, 2) as immediate_percentage #테이블 호출 from delivery #소비자 id와 주문 일자를 서브쿼리로 최소 주문일자를 지정하면서 첫 주문일자 조건으로 줌 where (customer_id, order_date) in ( select customer_id, min(order_date) from delivery group by 1) #소비자가 중복되면 안되니 그룹화
문제 설명 번역
- 처음 로그인한 날의 다음 날에 다시 로그인한 플레이어의 비율을 소수점 이하 2자리로 반올림하여 보고하는 솔루션을 작성합니다. 즉, 첫 번째 로그인 날짜부터 최소 2일 연속으로 로그인한 플레이어 수를 계산한 다음 해당 숫자를 총 플레이어 수로 나눠야 합니다.
최초로 로그인한 날부터 최소 이틀 연속 게임을 한 사람의 비율이 어떤지 찾는 문제였다. 문제는 심플했지만 date_sub()함수를 몰라서 솔루션을 찾아봐서 풀게되었다ㅠㅠ
헥심 키워드는 최초로그인한 날짜의 다음 날짜가 존재하는지 확인하는 것이다.# 메인쿼리의 이틀연속 로그인한 사용자에서 전체 사용자를 나눠줌 + 소숫점 두번째자리 올림 select ROUND(count(DISTINCT player_id)/(select count(distinct player_id) from activity), 2) as fraction # 테이블 호출 from activity # date_sub(특정 컬럼, 원하는 타입의 시간 빼기 가능) # 서브쿼리의 최소 이벤트 발생 일자가 date_sub()함수에 대응 가능한 일자가 있는지 찾아준다. where (player_id, date_sub(event_date, interval 1 day)) in ( select player_id, min(event_date) from activity group by player_id )
* 기억하기