본문 바로가기
SQL

프로그래머스 SQL 문제(4) - 경기도에 위치한 식품창고 목록 출력하기

by 김랑해 2023. 8. 8.

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이문제

 

NULL 일 경우 N을 추출해야하면 .. WHERE 절을 써야하나? 고민하다가 CASE WHEN 절을 사용하기로 결심

SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, FREEZER_YN
FROM FOOD_WAREHOUSE
CASE
WHEN FREEZER_YN IS NULL
THEN N
END;

당연히 오류 발생

 

1. N이 아니라 'N'이라고 입력해야 함

2. FREEZER_YN자리에 CASE문이 출력되어야 하니까 쟤를 넣어서 만들어야 한다 

 

그러니까 어떻게 하나면

 

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;

NULL이면 N을 출력하고 아니면 FREEZER_YN을 출력해주세요 가 되어야 하니까 FREEZER_YN을 쓰는 게 아닌 CASE WHEN 절을 써줘야 한다는 사실!

 

 

근데 더 쉽게 풀 수 있는 방법이 있을 것 같은데.. 음

 

아 NULL함수가 3개나 있는데 이걸 사용하지 않는 멍청함을 보여준 것임

 

<NULL함수>
1. NVL(AGE, 0) > AGE값이 NULL이면 0으로 대체하겠다
2. NVL2(AGE, 값1, 값2) > AGE가 NULL이 아니면 값1을, NULL이면 값2를
3. NULLIF(AGE, 19) > 두 값이 같을 경우 NULL을 아닐 경우 AGE를 출력

바보야

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

 

<LEARNING POINT>
1. N은 문자열, 문자열에는 꼭 ' ' 사용
2. NULL  함수 적극 사용