SQL | IF문, CASE문으로 범주 별 다른 조건 적용하기

    728x90

     

    0. IF문 / CASE문이 유용한 이유

     

    범주 별로 값을 구할 때 사용하는 대표적인 SQL문법Group By절이다.

    그런데 만약 범주 별로 다른 연산(계산, 문자바꾸기)을 적용하고 싶다면?

    이럴 때 사용할 수 있는 것이 IF문과 CASE문이다.

    IF문과 CASE문을 사용하면 새로운 카테고리를 만들고, 그 안에서 각자 다른 연산을 적용할 수 있다.

     

    IF문CASE문에 대해 자세히 알아보자.


    1. IF()문 집중 분석

     

    1-1) IF문

    : 조건에 따라 다른 방법을 적용하고 싶을 때

    : 원하는 조건을 충족할 때 적용할 방법충족하지 못했을 때 적용할 방법을 지정해줄 수 있음

    if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)

     

     

    1-2) IF문 실습문제

     

    문제1) 한식 음식점일 경우에는 '한식', 한식음식점이 아닐 경우에는 '기타'라고 지정

    SELECT restaurant_name ,
           cuisine_type ,
           IF(cuisine_type = 'Korean', '한식', '기타') Korean_food 
    FROM food_orders fo

     


     

    문제2) 주소가 평택 '문곡리'인 경우에만 '문곡리'를 '문가리'로 수정하기

     

    ▶ REPLACE 함수(문자 바꾸기 함수)를 모르면 풀 수 없는 문제

    [참고 게시글]

    [IT 교육/SQL] - SQL | REPLACE / SUBSTR / SUBSTRING_INDEX / CONCAT 함수 정리 + 실습 문제

     

    SQL | REPLACE / SUBSTR / SUBSTRING_INDEX / CONCAT 함수 정리 + 실습 문제

    0. SQL 쿼리문 짤 때 알면 유용한 함수 SQL에도 엑셀 함수같은 기능이 있다. 이번에는 문자열 데이터 값들을 바꿔주고, 추출하고, 이어주는 함수에 대해 자세히 알아보자. + SUBSTR 함수에 대해서는 SU

    nasena.tistory.com

    SELECT addr ,
           IF(addr LIKE '%평택%', REPLACE(addr,'문곡리','문가리'), addr) new_addr
    FROM food_orders fo 
    WHERE addr LIKE '%문곡리%'

     


     

    문제3) 이메일 도메인 중에 잘못된 이메일 주소(gmail) 수정하기

     

    ▶ 현재 원본 데이터의 email 컬럼 중 gmail.com 앞에 '@'가 빠져 있음.

     

    ▶ 잘못된 이메일 주소 gmail 앞에 @붙여주기

    SELECT SUBSTR(IF(email like '%gmail%', REPLACE(email, 'gmail', '@gmail'), email), 10) email_domain,
           COUNT(customer_id) count_customer,
           AVG(age) avg_age
    FROM customers c 
    Group By 1

     

     


    2. CASE문 집중 탐구

     

    2-1) CASE문

    : 조건을 두 개 이상 지정하고 싶을 때 사용

    : 여러 번의 IF문을 적용한 효과를 낼 수 있음  if(조건1, 값1, if(조건2, 값2, 값3))

    CASE WHEN 조건1 THEN 값(수식)1
         WHEN 조건2 THEN 값(수식)2
         ELSE 값(수식)3
    END

     

     

    2-2) CASE문 실습문제

     

    문제1) 음식 타입이 'Korean'일 때는 '한식',

    'Japanese' 혹은 'Chinese'일 때는 '아시아',

    그 외에는 '기타'라고 지정

    SELECT restaurant_name,
           cuisine_type,
           CASE WHEN cuisine_type = 'Korean' THEN '한식'
                WHEN cuisine_type = 'Japanese' or 'Chinese' THEN '아시아'
                ELSE '기타' 
           END food_type
    FROM food_orders fo


     

    문제2) 음식 단가 지정하기

    - 주문수량이 1일 때는 음식 가격으로, 주문 수량이 2개 이상일 때는 음식가격/주문수량으로 지정

    SELECT order_id ,
           price ,
           quantity ,
           CASE WHEN quantity = 1 THEN price
                WHEN quantity >= 2 THEN price/quantity
           END unit_price
    FROM food_orders fo


     

    문제3) 다음 조건으로 배달 시간이 늦었는지 판단하기

    - 주중: 25분 이상

    - 주말: 30분 이상

    SELECT order_id,
           restaurant_name,
           day_of_the_week,
           delivery_time ,
           CASE WHEN day_of_the_week = 'Weekday' and delivery_time >= 25 THEN 'Late'
                WHEN day_of_the_week = 'Weekday' and delivery_time < 25 THEN 'On-time'
                WHEN day_of_the_week = 'Weekend' and delivery_time >= 30 THEN 'Late' 
                WHEN day_of_the_week = 'Weekend' and delivery_time < 30 THEN 'On-time'
           END late_or_not
    FROM food_orders fo

     


    문제4) 새로운 카테고리 만들기_User Segmentation 해보기

    - 10세 이상, 30세 미만의 고객을 나이와 성별로 그룹 나누기

    SELECT name, 
           age,
           CASE WHEN (age BETWEEN 10 AND 19) AND gender = 'male' THEN '10대 남자'
                WHEN (age BETWEEN 10 AND 19) AND gender = 'female' THEN '10대 여자'
                WHEN (age BETWEEN 20 AND 29) AND gender = 'male' THEN '20대 남자'
                WHEN (age BETWEEN 20 AND 29) AND gender = 'female' THEN '20대 여자'
           END age_gender_group
    FROM customers c 
    WHERE age BETWEEN 10 and 29

    728x90

    댓글