본문 바로가기

코딩테스트

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

 

비교적 간단한 문제들

 

https://school.programmers.co.kr/learn/courses/30/parts/17045

 

프로그래머스

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

programmers.co.kr

 

 


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

-- 코드를 입력하세요
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, "N") FROM FOOD_WAREHOUSE WHERE ADDRESS LIKE "경기도%" ORDER BY 1;
  • IFNULL() 문제

 

2. 이름이 없는 동물의 아이디

-- 코드를 입력하세요
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY 1;
  • IS NULL/IS NOT NULL 문제

 

3. 이름이 있는 동물의 아이디

-- 코드를 입력하세요
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY 1;

 

 

4. NULL 처리하기

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, IFNULL(NAME, "No name"), SEX_UPON_INTAKE FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
  • SELECT 절에 없는 컬럼으로 정렬이 되는구만..

 

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

-- 코드를 입력하세요
SELECT COUNT(*) USERS FROM USER_INFO WHERE AGE IS NULL;

 

 

6. ROOT 아이템 구하기

-- 코드를 작성해주세요
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 II.ITEM_ID;

 

 

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

-- 코드를 작성해주세요
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID FROM ITEM_TREE WHERE PARENT_ITEM_ID IS NOT NULL)
ORDER BY 1 DESC;

# SELECT PARENT_ITEM_ID FROM ITEM_TREE
  • NOT IN() 을 수행할 때, 서브 쿼리에 NULL값이 포함되어 있으면 전체 쿼리가 반환되지 않을 수 있다.
  • 위와 같이 서브 쿼리에 IS NOT NULL 조건 추가
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO II
WHERE NOT EXISTS (
    SELECT 1 
    FROM ITEM_TREE IT 
    WHERE II.ITEM_ID = IT.PARENT_ITEM_ID
)
ORDER BY 1 DESC;
  • 또는 위와 같이 NOT EXISTS()를 이용하면 NULL 값이 존재해도 알맞게 반환된다.
    • NOT EXISTS() 연산은 반환 데이터가 아닌 TRUE/FALSE, 반환값이 한 줄이라도 존재하는지를 검사하는 연산이다. 따라서 WHERE 조건을 만족할 때만 TRUE가 되도록 해야 한다.

 

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

-- 코드를 작성해주세요
SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AVERAGE_LENGTH
FROM FISH_INFO;
  • 집계함수안에 IFNULL() 함수(또는 IF문 등)를 사용할 수 있다.

 

 


회고

NULL 다루기는 쉬워서 금방 끝났다.

얼마 없는 노트북 밧데리가 끝나기 전에 해치우기....

그래도 NOT IN의 조건은 새롭게 알았다.