[프로그래머스]조건별로 분류하여 주문상태 출력하기

SQL-쿼리테스트

목록 보기
16/21

문제출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131113

Q)

A)

CASE WHEN THEN ... END
IF(COND,TRUE,FALSE)

두가지 방법으로 풀 수 있는 문제이다.

나는 case when 구문이 먼저 떠올라 해당 방법으로 풀었고, 그 쿼리는 다음과 같다.

-- 코드를 입력하세요
SELECT
    ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE,"%Y-%m-%d") AS OUT_DATE,
    CASE 
        WHEN OUT_DATE <= "2022-05-01" THEN '출고완료'
        WHEN OUT_DATE > "2022-05-01" THEN '출고대기'
        ELSE "출고미정"
    END "출고여부"
FROM FOOD_ORDER
ORDER BY ORDER_ID;

만약 IF 문을 이용해 풀이를 한다면 다음과 같이 쿼리를 작성할 수 있을거다.

-- 코드를 입력하세요
SELECT
    ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE,"%Y-%m-%d") AS OUT_DATE,
    IF(OUT_DATE <= "2022-05-01","출고완료",
      IF(OUT_DATE > "2022-05-01","출고대기","출고미정")) AS "출고여부"
FROM FOOD_ORDER
ORDER BY ORDER_ID;

그렇다면 이 둘의 차이는 어떤게 있을지 궁금해서 한번 알아보았다.

일단 해당 문제에서 사용되는 테이블 자체의 크기는 크지 않아 속도 차이는 거의 없었지만
만약에 테이블의 크기가 매우 커진다는 가정하에 둘의 속도차이는 발생할 수 있다고 한다.

하지만 요즘 컴퓨터의 사양으로 인해 이 차이는 크지 않다고 한다.

그렇지만 가독성은 CASE WHEN 구문이 훨씬 뛰어나다고 생각한다. 지금과 달리 여러 조건이 더 붙는다면 IF 중첩의 경우 계속하여 붙을텐데 이는 가독성이 매우 떨어질꺼다.

하지만 복잡한 조건이 있는 경우 IF 문이 더욱 읽기 쉬울 수도 있다.

결국 둘의 차이는 크지 않고, 가독성의 차이 정도라고 나는 이해했다.
결국 좋은 코드는 읽기 쉬운 코드가 아닐까 다시 한번 생각이 들었다.


profile
살아남기 위해 끄적이는 블로그 : 생존법

0개의 댓글