본문 바로가기

스파르타 코딩클럽/[강의] 엑셀보다 쉽고 빠른 SQL

[엑셀보다 쉽고 빠른 SQL] 3주차. 문자 데이터 가공과 조건에 따른 포맷 변경

문자 데이터 가공

REPLACE 특정 문자를 다른 문자로 변경 replace(Column, 현재 값, 바꿀 값)
SUBSTRING 특정 문자만 조회하기 substr(Column, 시작 위치, 글자 수)
CONCAT 여러 컬럼의 문자 합치기 concat(붙이고 싶은 값1, 붙이고 싶은 값2, ...)

 

조건식 IF, CASE

IF 조건을 지정해주는 기초 문법 if(조건, 조건 충족할 때, 조건 충족하지 않을 때)
CASE 여러개의 조건을 지정 case when 조건1 then 값1
         when 조건2 then 값2
         else 값3 end

 

데이터 타입 오류 해결

  • CAST : 데이터 타입 변환 함수
  • cast Column as 데이터 타입
  • 데이터 타입 : VARCHAR(CHAR) - 문자열형
                          DECIMAL - 숫자형(정수와 소수 부분 모두 나타냄)
                          INT - 정수형
                          DATE - 날짜 및 시간형

3주차 숙제

 

다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.

- 주중 : 25분 이상

- 주말 : 30분 이상

 

CASE 문을 사용하여 각 조건에 해당할 경우 Late를 출력하고 그렇지 않은 경우 On-time을 출력하는 쿼리문을 작성했다.

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

▼ 결과

 

조건을 작성할 때 주중or주말, 배달시간 두가지의 조건을 지정해야 해서 AND를 사용했는데

CASE문과 IF문을 결합하여 다음과 같은 쿼리문을 작성할 수도 있다.

select order_id, restaurant_name, day_of_the_week, delivery_time,
       case when delivery_time>=if(day_of_the_week='Weekday', 25, 30) then 'Late'
            else 'On-time' end "지연여부"
from food_orders