sql 코딩테스트는 어디서도 떨어지기 싫다는 목표로,, 매일 easy 든 medium이든 high 든 풀고있다.
[풀이과정]
정리하자면 문제에서 요구하는 바는 첫주문이면서,
customer_pref_delivery_date 와 첫주문 일자가 같은 Customer_id를 찾은 후 찾은 customer_id /전체 customer_id * 100 을 해주면 된다고 이해했다.
[맞춘 정답 코드]
with sub_t as (
select customer_id
, order_date
, customer_pref_delivery_date
, case when t.rk = 1 then 1 else 0 end as first_order
, case when t.order_date = t.customer_pref_delivery_date then 1 else 0 end as immediate
from (
select rank() over (partition by customer_id order by order_date asc) as rk
, delivery_id
, customer_id
, order_date
, customer_pref_delivery_date
from Delivery
) as t
)
select round((cnt / tot_cm ) * 100 ,2) as immediate_percentage
from (
select count(distinct customer_id) as tot_cm
, count(distinct case when first_order = 1 and immediate = 1 then customer_id end) as cnt
from sub_t
) t_2
rank window 함수를 활용하여 첫주문을 찾아내고, 서브쿼리를 활용하여 답을 도출해냈다.
SQL은 데이터프레임에 대해 논리적으로 어떻게 설계할지를 잘 구상하면 그리 어렵지 않게 답을 찾아내는 것 같다 ㅠㅠ 근데 그게 어렵지..
'coding > sql 코딩테스트' 카테고리의 다른 글
[해커랭크] New Companies (0) | 2025.03.26 |
---|---|
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2025.03.25 |
[리트코드] 620. Not Boring Movies (0) | 2025.02.15 |
[리트코드] 619. Biggest Single Number (0) | 2025.02.15 |
[리트코드] Investments in 2016 (0) | 2025.02.11 |