몸과 마음이 건전한 SW 개발자

[SQL-IS NULL] 프로그래머스 Lv. 3 업그레이드 할 수 없는 아이템 구하기 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-IS NULL] 프로그래머스 Lv. 3 업그레이드 할 수 없는 아이템 구하기 [다시 풀어 보기]

스위태니 2024. 12. 26. 16:47

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/273712

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

틀린 코드

WITH HAVE_PAR AS (
    SELECT PARENT_ITEM_ID
    FROM ITEM_TREE
    WHERE PARENT_ITEM_ID IS NOT NULL
    GROUP BY PARENT_ITEM_ID
), NO_UPGRADE AS (
    SELECT
        II.ITEM_ID,
        II.ITEM_NAME,
        II.RARITY
    FROM ITEM_INFO II
    JOIN HAVE_PAR HP
    ON HP.PARENT_ITEM_ID != II.ITEM_ID
)
SELECT
    ITEM_ID,
    ITEM_NAME,
    RARITY
FROM NO_UPGRADE
ORDER BY ITEM_ID DESC;

정답 코드

WITH NO_UPGRADE AS (
    SELECT 
        II.ITEM_ID,
        II.ITEM_NAME,
        II.RARITY
    FROM ITEM_INFO II
    LEFT JOIN ITEM_TREE IT
    ON II.ITEM_ID = IT.PARENT_ITEM_ID
    WHERE IT.PARENT_ITEM_ID IS NULL
)
SELECT
    ITEM_ID,
    ITEM_NAME,
    RARITY
FROM NO_UPGRADE
ORDER BY ITEM_ID DESC;

풀이 과정

 

  1. NO_UPGRADE CTE:
    • ITEM_INFO 테이블을 기준으로 ITEM_TREE 테이블과 LEFT JOIN.
    • ITEM_TREE.PARENT_ITEM_ID IS NULL 조건을 사용하여 더 이상 업그레이드 대상이 아닌 아이템을 필터링.
  2. 최종 SELECT:
    • NO_UPGRADE CTE에서 필요한 컬럼 (ITEM_ID, ITEM_NAME, RARITY)을 선택.
    • ORDER BY ITEM_ID DESC로 아이템 ID 기준 내림차순 정렬.

 

느낀점

  • LEFT JOIN을 하면 빈 값은 NULL로 채워지며 NULL인 값을 찾으면 업그레이드가 불가능한 아이템이 된다.