[프로그래머스] 업그레이드 할 수 없는 아이템 구하기

yannie·2024년 10월 17일
0

[문제]

더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.

[내가 푼 풀이(정답)]

SELECT
    I.ITEM_ID,
    I.ITEM_NAME,
    I.RARITY
FROM ITEM_INFO I
INNER JOIN ITEM_TREE T
ON I.ITEM_ID = T.ITEM_ID
WHERE T.ITEM_ID NOT IN (SELECT T.PARENT_ITEM_ID
                        FROM ITEM_TREE T
                        WHERE T.PARENT_ITEM_ID IS NOT NULL
                        GROUP BY T.PARENT_ITEM_ID)
ORDER BY I.ITEM_ID DESC
;

[코드리뷰]

  • INNER JOIN을 통해 두 가지 테이블을 하나로 조인하였다.
  • JOIN한 후 TREE테이블의 PARENT_ITEM_ID 컬럼에 없는 ITEM_ID를 추출해 내야 하기 때문에 (업그레이드를 할 수 없는 ID)
    • 서브쿼리를 사용하여 TREE테이블의 PARENT_ITEM_ID만을 추출하였다.
    • PARENT_ITEM_ID컬럼 데이터 중 NULL값이 있었기 때문에 NULL값이 아닌 것만 필터링 하였다.
    • 또한 중복되지 않도록 PARENT_ITEM_ID별로 그룹화하였다.
  • 더이상 업그레이드 할 수 없다는 것은 PARENT_ITEM_ID에 없는 ITEM_ID라는 뜻이니까 NOT IN을 사용하였다.

기억해!

  1. 일단 데이터 자체, 문제 자체가 이해되지 않았다.
    • 더 이상 업그레이드 할 수 없는 데이터?가 무엇을 의미하는지 정확히 파악하기 힘들었다.
      A -> B : B는 A의 부모 아이템 ID이다.
      즉, "A는 B로 업그레이드 할 수 있다."는 의미였다.
      => 더 이상 업그레이드를 할 수 없는 ITEM_ID는 PARENT_ITEM_ID에 없는 아이템인 셈이다.
    • 이걸 파악하는데 조금 시간이 걸렸다....
  2. 포함되지 않아야 하기 때문에 NOT IN을 사용하였다.

0개의 댓글