💥 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 먹이고 해결 완료
'Sparta > CODEKATA' 카테고리의 다른 글
| [251024] QCC (3) | 2025.10.24 |
|---|---|
| [250926] 스파르타코딩 본캠프 39일차 (2) | 2025.09.26 |
| [250923] 스파르타코딩 본캠프 36일차 (3) | 2025.09.23 |
| [250919] 스파르타코딩 본캠프 34일차 (0) | 2025.09.19 |
| [250918] 스파르타코딩 본캠프 33일차 (0) | 2025.09.18 |