IS NULL 문제들은 Level 1, 2 밖에 없는 거 보면 전반적으로 쉬운가 보다

특별히 순서를 지켜서 작성할 만한 건 없었고,
자잘한 조건들이 많았다.
경기도에 위치한냉동시설 여부가 NULL인 경우, 'N'으로 출력CASE WHEN ~ ELSE END 절창고 ID를 기준으로 오름차순 정렬제대로 다시 읽고 제출하니 바로 통과했다!
SELECT
WAREHOUSE_ID,
WAREHOUSE_NAME,
ADDRESS,
CASE
WHEN FREEZER_YN IS NULL THEN 'N'
ELSE FREEZER_YN
END AS FREEZER_YN
FROM
FOOD_WAREHOUSE
WHERE
ADDRESS LIKE '경기도%'
ORDER BY
WAREHOUSE_ID;

쩝..
SELECT
ANIMAL_ID
FROM
ANIMAL_INS
WHERE
NAME IS NULL;

쩝쩝..
SELECT
ANIMAL_ID
FROM
ANIMAL_INS
WHERE
NAME IS NOT NULL;

쩝쩝쩝..
SELECT
COUNT(USER_ID) AS USERS
FROM
USER_INFO
WHERE
AGE IS NULL;

드디어 문제다운 문제가 나왔다!
CASE WHEN 컬럼 THEN 값1 ELSE 값2 ENDAVG()ROUND(컬럼, 자리수)3월 달에 있었던, SQLD 시험을 준비하며 한동안 SQL을 많이 풀었는데,,
그 후 다른 자격증들을 공부하며 한동안 잊고 지냈다..
그 덕에 이번 iM뱅크 코테에서 SQL 문제를 풀지 못 했다..
그 문제도 CASE WHEN 컬럼 THEN 값1 ELSE 값2 END을 사용했어야 하는데,
너무 오랜만이라서 기억이 안 났다..😥
그 문제만 풀었으면 3sol로 1차 면접으로 가는 거 였는데...😥
하반기에는 기필코 승리하리라..🔥🔥
SELECT
ROUND(
AVG(
CASE
WHEN LENGTH IS NULL THEN 10
ELSE LENGTH
END
),
2
) AS AVERAGE_LENGTH
FROM
FISH_INFO;

CASE WHEN THEN ELSE END절만 사용할 줄 알면 풀 수 있다!
SELECT
ANIMAL_TYPE,
CASE
WHEN NAME IS NULL THEN "No name"
ELSE NAME
END AS NAME,
SEX_UPON_INTAKE
FROM
ANIMAL_INS;
SELECT
*
FROM
ITEM_TREE
WHERE
PARENT_ITEM_ID IS NULL;

SELECT
ITEM_ID,
ITEM_NAME
FROM
ITEM_INFO
WHERE
ITEM_ID IN (
SELECT
ITEM_ID
FROM
ITEM_TREE
WHERE
PARENT_ITEM_ID IS NULL
);

'ITEM_A'->'ITEM_B'->'ITEM_C' 와 같이 업그레이드가 가능한 아이템이 있다면
'ITEM_C'의 PARENT 아이템은 'ITEM_B'
'ITEM_B'의 PARENT 아이템은 'ITEM_A'
ROOT 아이템은 'ITEM_A'가 됩니다.
ITEM_TREE테이블을 출력해보면 이렇다.

PARENT_ITEM_ID는 null, 0, 1이다.
ITEM_ID 0은 1이나, 2로
ITEM_ID 1은 3이나, 4로
업그레이드가 가능한 것이다.
따라서 여기서 PARTENT_ID 컬럼의 0과 1을 제외한 ITEM_ID들은
모두 더 이상 업그레이드 불가능한 아이템들이다.
PARENT_ITEM_ID가null인 경우는 루트 아이템을 의미하는 것이기에 당연히 제외 대상이다.
SELECT
DISTINCT PARENT_ITEM_ID
FROM
ITEM_TREE
WHERE
PARENT_ITEM_ID IS NOT NULL;
이 SQL문을 서브쿼리로 사용할 것이다!
위 서브쿼리의 결과는 부모로 사용된 ITEM_ID들이다.
따라서 위 결과를 제외시킨다면 부모로 사용되지 않은 아이템들이다.
즉, 업그레이드가 가능한 ITEM_ID들이다!
WHERE절에 NOT IN 연산을 통해 서브쿼리에서 ITEM_ID를 제외시켜준다면,
업그레이드가 가능한 ITEM_ID들만 출력되는 것이다!
SELECT
ITEM_ID,
ITEM_NAME,
RARITY
FROM
ITEM_INFO
WHERE
ITEM_ID NOT IN (
SELECT DISTINCT
PARENT_ITEM_ID
FROM
ITEM_TREE
WHERE
PARENT_ITEM_ID IS NOT NULL
)
ORDER BY
ITEM_ID DESC;