ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 3-2일차 / 조건확장, 데이터 타입
    SQL 정리/사전캠프 2024. 3. 20. 14:41

    어제 하루 일찍 시작한 내용이 중요한 것이 많아 나눠서 학습을 진행하게 되었다.

    지금까지는 코드문의 타건 작성을 통해 암기하고자 코드의 원문이 아닌 원래의 이름으로 작성하였으나

    각 문법이 더욱 중요해지고 익숙해졌기에 사용하던 코드를 그대로 복사, 기록하여 

    시간효율과 기억상의 이점을 챙기도록 해야겠다.

     

     

    다 조건형 if문- case

     

     

    select case when cuisine_type='korean' then '한식'
    			when cuisine_type in ('Japanese', 'Chinese') then '아시아'
    			else '기타' end "음식타입",
           cuisine_type 
    from food_orders

     

    select order_id,
    		price,
    		quantity,
    		case when quantity = 1 then price
    			when quantity >=2 then price/quantity end "음식단가"
    from food_orders

     

    위 두 코드의 차이점은 else문, 즉 예외 처리 가 필요한 상황인가 아닌가에 따라 포함 될 수도, 아닐수도 있음을 나타낸다.

     

    집합의 새로운 명칭이 아닌 각 데이터의 새로운 카테고리를 형성 및 정의하는데 유용하다.

    풀어 말하자면 group by 로는 구간별 집합에 명명이 가능하지만 case는 각 데이터마다 라벨링이 가능하다는 의미이다.

     

     

    데이터 타입

    문자형 / 숫자형

    --문자를 숫자로
    cast(if(rating='not given', '1', rating) as decimal)
    --숫자를 문자로
    concat(restaurant_name, '-', cast(order_id as char))

    decimal - 소수점?

     

    char(actor?)

     

     

     

     

     

    의문점 / 추가 고려 사항

    이후에 응용해볼 방법들

     

     

     

     

    case when price/quantity <=5000 then '저가'
    when price/quantity between 5001 and 15000 then '중가'
    when price/quantity >15000 then '고가' end "가격대"

    이러한 조건문을 달 때, if문을 활용하여 quantity 의 경우의 수, 즉 0을 제외하는 것은 필요성을 느끼나

    quantity=1 then price를 굳이 필요로 하는가, 

    어느 쪽이 자원을 덜 필요로 하는가가 궁금하다.

     

    select day_of_the_week, delivery_time,
    case when if( day_of_the_week ='weekday' and delivery_time >=25 or day_of_the_week = 'weekend'and delivery_time >=30 ,'fail', 'achieve')  "배달 성과"
    from food_orders
    
    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 = 'weekend'and delivery_time >=30 then 'Late'
    else 'On-time'end  "배달 성과"
    from food_orders

    왜 위의 코드는 불가능하고

    아랫코드는 가능한지 의문이다.

    관점은 if 문의 조건문 내에 or이 들어가 중복 적용이 불가능한가?

     

    답변 : 스프레드 시트나 엑셀에선 가능하나

    SQL 에선 지원이 불가능한 언어이다.

    SQL 내에서 추가적인 조건을 가지기 위해서는 case when 절을 이용하는 것이 유효.

    'SQL 정리 > 사전캠프' 카테고리의 다른 글

    5일차 - null값, coalesce, pivot, 시간형식  (2) 2024.03.22
    SQL - 4일차  (0) 2024.03.20
    SQL - 3일차  (0) 2024.03.19
    SQL - 2일차 연산자 / 범주 / 정렬  (1) 2024.03.19
    SQL - 1일차 기초문/필터링  (0) 2024.03.19
Designed by Tistory.