[SQL 심화] 리트코드 2문제::1174. Immediate Food Delivery II,1070. Product Sales Analysis III

Hyeon·2024년 10월 17일

SQL 문제 풀이

목록 보기
30/61

1174. Immediate Food Delivery II

이 문제는 datediff 함수를 활용해서 값의 차이가 0일 때 값을 따로 출력해 구랄 수 있는 문제이다.

고객이 선호하는 배송 날짜가 주문 날짜와 같으면 해당 주문을 '즉시 주문'이라고 하며, 모든 고객의 '첫번째 주문'을 기준으로 했을 때 고객이 즉시 주문할 확률을 구하는 것이다.

해당 문제는 그닥 어렵지 않아 쉽게 처리! medium이지만 난이도가 다른 문제보다 괜찮으니 초반에 풀어보는게 좋다.

어떻게 풀었냐면?
1.고객 주문 최소 날짜 기준으로 선호 날짜의 차이 일수를 diff 컬럼으로 생성하였다.
2.차이 일수가 0일때 (즉, 즉시주문일때) counting 해주었고
3.percentage구해서 결과값 바로 출력할 수 있게끔하였다.

문제


풀이

with cte_1 as (select customer_id,datediff(min(order_date) , min(customer_pref_delivery_date) ) as diff
from Delivery
group by customer_id),

cte_2(total_date, zero_date) as (select count(*) , sum(case when diff = 0 then 1 else 0 end) as diff_0
from cte_1)

select round(zero_date*100/total_date,2) as immediate_percentage
from cte_2

1070. Product Sales Analysis III

판매된 모든 제품의 첫해에 대한 제품 ID~ 가격을 출력하는 문제이다.
이 문제도 너무 어렵지 않은 문제라 medium이지만 바로 풀 수 있는 문제이다.

이 제품은 join & 판매된 첫해를 기준으로 하여 서브쿼리를 묶는 문제로 풀었다.

어떻게 풀었냐염?
1.판매된 상품에 대해 제품 정보값 출력하기
: 이때 join을 했을 때 year가 없다면 판매된 상품이 아니기 때문에 where 절로 null 값이 아닐 경우만 출력하도록 하기
2.상품이 판매된 첫해를 기준으로 값 구하rl
3.이때 where 구문 서브쿼리 활용해서 product_id와 year이 모두 같은 경우 제품 정보가 출력될 수 있도록 하기
4.출력시 column명 변경하고 sale_id 제거하여 출력하기

문제


코드

-- 3.출력시 column 명 변경 & sale_id 제거
select product_id, year as first_year, quantity, price
from Sales
where (product_id, year) in (
-- 2.상품이 판매된 첫해를 기준으로
select product_id, min(year) as year
from (
-- 1.판매된 상품에 한해 제품 정보값 출력
select sale_id , a.product_id, year,quantity,price
from Sales a right join Product b
on a.product_id = b.product_id
where year is not null) t

group by product_id);

2024.10.16(수)에 푼 문제! 포스팅 하루 늦게했다..!

0개의 댓글