[SQL 오답] CASE-WHEN-THEN-ELSE-END 과 IFNULL

byeol·2023년 4월 13일
0

접근

자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
경기도에 위치한 식품창고 목록 출력하기

이 문제를 통해서 배운 것은
어떤 DB가 있을 때 SELECT문은 한 튜플 하나하나 FOR문 안에 있는 조건문이라고 생각하면 편하다는 것입니다. (물론 GROUP BY가 없다는 전제하에)

FOR(테이블 전체){
   IF(SELELCT문){
   
    }

}
RETURN SELECT문으로 생긴 테이블

이 문제의 조건은
어떤 날짜에 대여 가능하면 '대여 가능', 불가능하면 '대여중'을 표시하는 새로운 칼럼을 하나 만드는 것입니다.

하지만 WHERE절을 이용해서
대여기간에 날짜가 포함되면 남겨야하나로 접근했다가
결국에는 새로운 칼럼을 만드는 방법을 모르기 때문에 포기하게 되었습니다.

✅ 그래서 새롭게 알게된 방법은
어떤 조건에 의해 새로운 칼럼에 값을 넣을 때 사용하는
CASE WHEN THEN ELSE END 입니다.

✅ WHEN 어떤 조건을 만족하면 THEN 어떤 값 ELSE 아닌경우 현재값 유지
이것을 표현하고 싶을 때는

CASE WHEN FREEZER_YN IS NULL
THEN 'N' ELSE FREEZER_YN END

위와 같이 속성명을 넣으면 원래 값이 유지됩니다.

✅ 날짜 사이를 표현할 때

DATE('2022-10-16') BETWEEN START_DATE AND END_DATE

DATE 안에 넣어서 날짜의 개념을 넣어주는 방법에 대해서도 배웠습니다.

✅ 어떤 값이 NULL인 경우 이 값을 채워주세요를 표현하는 IFNULL

IFNULL(FREEZER_YN,'N') AS FREEZER_YN

풀이

  • 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

    SELECT DISTINCT CAR_ID, 
    CASE 
    WHEN CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE DATE('2022-10-16') BETWEEN START_DATE AND END_DATE
    ) THEN '대여중'
    ELSE '대여 가능'
    END
    AS AVAILABILITY
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    ORDER BY CAR_ID DESC;
  • 경기도에 위치한 식품창고 목록 출력하기 풀이 1

    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 WAREHOUSE_NAME LIKE '%경기%'
    ORDER BY WAREHOUSE_ID
  • 경기도에 위치한 식품창고 목록 출력하기 풀이 2

    SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS,
    IFNULL(FREEZER_YN,'N') AS FREEZER_YN
    FROM FOOD_WAREHOUSE
    WHERE WAREHOUSE_NAME LIKE '%경기%'
    ORDER BY WAREHOUSE_ID
profile
꾸준하게 Ready, Set, Go!

0개의 댓글