Sparta/CODEKATA

[250924] 스파르타코딩 본캠프 37일차

junecho 2025. 9. 24. 16:06

💥  CODEKATA                                                                                                           

~ 105문제

 

 

101)  Product Sales Analysis III

# 1차 코드
WITH first AS (
    SELECT product_id, MIN(year) AS first_year
    FROM sales
    GROUP BY product_id
)
SELECT f.product_id, f.first_year, s.quantity, s.price
FROM first f JOIN sales s ON f.product_id = s.product_id AND f.first_year = s.year

⇒ ⭕

어제 풀었던 문제랑 비슷한 양상인데 WITH 안쓰고 어떻게 해보려다가 기억이 안나서 그냥 WITH씀

효율 좋은건 역시나 WITH 안쓰는 쿼리였다

WITH 안쓰면서 다시 짜보자

어제 풀은 문제의 효율 1등 코드를 참고해서 짰음

# 2차 코드
SELECT a.product_id, a.first_year, s.quantity, s.price
FROM (
    SELECT product_id, MIN(year) AS first_year
    FROM sales
    GROUP BY product_id
) a LEFT JOIN sales s ON a.product_id = s.product_id AND a.first_year = s.year

⇒ ⭕

굿

FROM 절에다가 또 서브쿼리 쓸바에 WITH로 항상 뺐기 때문에 FROM에다가 박기는 좀 낯설음

FROM 절에다가 서브쿼리 박는게 효율이 쥐똥만큼 더 좋긴 한데,

솔직히 가독성 좋은건 WITH지 않나 ㅎ? (WITH교 신도의 의견)

 

 

105)  Customers Who Bought All Products

SELECT c.customer_id
FROM customer c LEFT JOIN product p ON c.product_key = p.product_key
GROUP BY c.customer_id
HAVING COUNT(DISTINCT c.product_key) = (SELECT COUNT(DISTINCT product_key) FROM product)

⇒ ⭕

오 딱 HAVING에 서브쿼리만 쓸 수 있으면 바로 풀리는데…! 하면서 검색해봤더니 ㄹㅇ 쓸 수 있었음

처음에 c.product_key에도 DISTINCT 안먹이고 했다가 서버 테스트에서 틀렸다고 하길래,

테스트케이스로 가져와서 하나하나 출력해보니까 product_key를 같은 걸 여러번 사는 경우도 있었음!

그래서 DISTINCT 먹이고 해결 완료