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

박채은·2023년 6월 22일
0

코딩테스트

목록 보기
44/52

12세 이하인 여자 환자 목록 출력하기

-- 12세 이하인 
-- 여자환자
-- 전화번호가 없는 경우, 'NONE'으로 출력
-- 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬

SELECT PT_NAME, PT_NO, GEND_CD, AGE, TLNO
from PATIENT
where GEND_CD='W' and AGE<=12
order by AGE DESC, PT_NAME;

전화번호가 없는 경우, 'NONE'으로 출력을 어떻게 작성해야할지 모르겠다.
찾아보니 IFNULL() 메서드가 있다는 것을 알게 되었다.

✔️ IF() / IFNULL()

  • IF(condition, value_if_true, value_if_false)
  • IFNULL(expression, alt_value)
    • expression이 NULL이면, alt_value 값으로 대체

최종 코드

SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, "NONE") AS TLNO
from PATIENT
where GEND_CD='W' and AGE<=12
order by AGE DESC, PT_NAME;

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

✔️ IFNULL() 사용

SELECT WAREHOUSE_ID,WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') as FREEZER_YN
from FOOD_WAREHOUSE
where ADDRESS like '경기도%'
order by WAREHOUSE_ID;

✔️ IF() 사용

SELECT WAREHOUSE_ID,WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN is null, 'N', FREEZER_YN) as FREEZER_YN
from FOOD_WAREHOUSE
where ADDRESS like '경기도%'
order by WAREHOUSE_ID;

✔️ CASE WHEN 사용

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;

✔️ CASE WHEN

  • Switch 문처럼 사용한다.
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

/* 예시 1 */
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;

/* 예시 2 */
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

4. NULL 처리하기

SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') as NAME, SEX_UPON_INTAKE
from ANIMAL_INS

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

  • AGE가 NULL인 경우의 갯수를 세야한다.
/* count() 사용 */
SELECT count(*) as USERS
from USER_INFO
where AGE is null;

/* sum() 사용 */
SELECT sum(AGE is null) as USERS
from USER_INFO
  • SUM()을 사용하는 경우
    • AGE is null이 참인 경우, 칼럼은 1을 거짓인 경우 0을 출력한다.
    • 따라서 이 값들을 모두 더하면 AGE가 null인 갯수가 나오는 것!

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

[참고]
https://www.w3schools.com/sql/sql_case.asp

0개의 댓글