[프로그래머스/SQL 고득점 Kit] IS NULL

2024. 9. 17. 19:48코딩 테스트(Coding Test)/프로그래머스

경기도에 위치한 식품창고 목록 출력하기

나의 답)

SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS 'FREEZER_YN'
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;

# FOOD_WAREHOUSE에서
# '경기도'에 위치한 창고의
# ID, 이름, 주소, 냉동시설 여부 조회
# if) 냉동시설 == NULL -> 'N'으로 출력
# ID ASC

이름이 없는 동물의 아이디

나의 답)

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID ASC;

# ANIMAL_INS에서
# 이름 == NULL인
# ID 조회
# ID ASC

이름이 있는 동물의 아이디

나의 답)

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID ASC;

# ANIMAL_INS에서
# 이름이 있는 동물의
# ID 조회
# ID ASC

NULL 처리하기

나의 답)

SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

# ANIMAL_INS에서
# 생물 종, 이름, 성별 및 중성화 여부 조회
# ID ASC
# if) 이름 == NULL -> 'No name'으로 출력

나이 정보가 없는 회원 수 구하기

나의 답)

SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE IS NULL;

# USER_INFO에서
# 나이 == NULL인 회원이
# 몇 명인지 출력 -> USERS

ROOT 아이템 구하기

나의 답1)

SELECT ii.ITEM_ID, ii.ITEM_NAME
FROM ITEM_INFO ii, ITEM_TREE it
WHERE it.PARENT_ITEM_ID IS NULL AND ii.ITEM_ID = it.ITEM_ID
ORDER BY ITEM_ID ASC;

# ITEM_INFO, ITEM_TREE에서
# ROOT 아이템의
# ID, 아이템명 출력
# ID ASC

 

나의 답2)

SELECT ii.ITEM_ID, ii.ITEM_NAME
FROM ITEM_INFO ii
JOIN ITEM_TREE it ON ii.ITEM_ID = it.ITEM_ID
WHERE it.PARENT_ITEM_ID IS NULL
ORDER BY ITEM_ID ASC;

# ITEM_INFO, ITEM_TREE에서
# ROOT 아이템의
# ID, 아이템명 출력
# ID ASC

업그레이드 할 수 없는 아이템 구하기

나의 답1)

SELECT ii.ITEM_ID, ii.ITEM_NAME, ii.RARITY
FROM ITEM_INFO ii
WHERE ii.ITEM_ID NOT IN (
    SELECT it.PARENT_ITEM_ID
    FROM ITEM_TREE it
    WHERE it.PARENT_ITEM_ID IS NOT NULL
)
ORDER BY ii.ITEM_ID DESC;

# ITEM_INFO, ITEM_TREE에서
# 더 이상 업그레이드할 수 없는 아이템의
# ID, 아이템명, 아이템의 희귀도 출력
# ID DESC

 

나의 답2)

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
ORDER BY ii.ITEM_ID DESC;

# ITEM_INFO, ITEM_TREE에서
# 더 이상 업그레이드할 수 없는 아이템의
# ID, 아이템명, 아이템의 희귀도 출력
# ID DESC

 

* 업그레이드가 불가능한 아이템

: ITEM_TREE 테이블에서 PARENT_ITEM_ID로 참조되지 않는 아이템들이 업그레이드가 불가능한 아이템이다.


잡은 물고기의 평균 길이 구하기

나의 답1)

SELECT ROUND(AVG(CASE WHEN LENGTH > 10 THEN LENGTH ELSE 10 END), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;

# FISH_INFO에서
# 평균 길이 출력 -> AVERAGE_LENGTH
# 소수점 3째자리에서 반올림
# 10cm 이하인 물고기들은 10cm로 취급

 

 

나의 답2)

SELECT ROUND(AVG(IF(LENGTH IS NULL, 10, IF(LENGTH <= 10, 10, LENGTH))), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;

# FISH_INFO에서
# 평균 길이 출력 -> AVERAGE_LENGTH
# 소수점 3째자리에서 반올림
# 10cm 이하인 물고기들은 10cm로 취급