데이터 분석 - SQL

hyun-jin·2025년 2월 18일

데이터 분석

목록 보기
2/100
post-thumbnail

데이터 분석(SQL) 2일차 - mysql 사용

1. replace - 데이터명 번경

replace(바꿀 컬럼, 현재 값, 바꿀 값)

  • 식당 명에 'blue'를 'Pink'로 바꾸기

    select restaurant_name "원래 상점명",
            replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
    from food_orders
    where restaurant_name like '%Blue Ribbon%'

2. substring(substr) - 특정 문자만 골라 조회

substr(조회 할 컬럼, 시작 위치, 글자 수)

  • 서울 음식점들의 주소를 전체가 아닌 '시도'만 나오도록 수정

    select addr "원래 주소",
            substr(addr, 1, 2) "시도"
    from food_orders
    where addr like '%서울특별시%'

  • 10번째부터 마지막까지 불러 올때 뒤에 숫자는 입력 안해도됨

    select substr(email, 10) '도메인',
            count(1) '고객 수',
            avg(age) '평균 연령'
    from customers
    group by 1

3. concat - 컬럼 값 하나로 합치기

concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)

  • 서울시에 있는 음식점은 ‘[서울] 음식점명’ 이라고 수정

    select restaurant_name "원래 이름",
            addr "원래 주소",
            concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
    from food_orders
    where addr like '%서울%'

4. group by 새로운 팁

- select에 있는 컬럼을 순서대로 숫자로 표시 가능

select substr(addr, 1, 2) '지역', <--- 1
        cuisine_type, <---2
        avg(price) '평균 금액'
from food_orders
where addr like '%서울%'
group by 1, 2

5. 조건문 - if문, case문

1) if문 - 원하는 조건에 충족할 때 적용할 방법과 아닌 방법을 지정

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

  • 음식 타입을 ‘Korean’ 일 때는 ‘한식’, ‘Korean’ 이 아닌 경우에는 ‘기타’ 라고 지정

    select restaurant_name,
            cuisine_type "원래 음식 타입",
            if(cuisine_type='Korean', '한식', '기타') "음식 타입"
    from food_orders

  • ‘문곡리’ 가 평택에만 해당될 때, 평택 ‘문곡리’ 만 ‘문가리’ 로 수정

    select addr "원래 주소",
             if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
    from food_orders
    where addr like '%문곡리%'

  • 잘못된 이메일 주소 (gmail) 만 수정을 해서 사용

    select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10
            count(customer_id) "고객 수",
            avg(age) "평균 연령"
    from customers
    group by 1

2) case문 - 각 조건별로 적용 할 값을 지정

case when 조건1 then 값(수식)1
        when 조건2 then 값(수식)2
        else 값(수식)3
end

  • 음식 단가를 주문 수량이 1일 때는 음식 가격, 주문 수량이 2개 이상일 때는 음식가격/주문수량 으로 지정
    case when 조건 end 까지 마무리 작성 필수!

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

  • 주소의 시도를 ‘경기도’ 일때는 ‘경기도’, ‘특별시’ 혹은 ‘광역시’ 일 때는 붙여서, 아닐 때는 앞의 두 글자만 사용

    select restaurant_name,
            addr,
            case when addr like '%경기도%' then '경기도'
                  when addr like '%특별%' or addr like '%광역%' then substring(addr, 1, 5)
                  else substring(addr, 1, 2) end "변경된 주소"
    from food_orders

6. cast - 데이터 타입 변경(문자->숫자),(숫자->문자)

decimal = 숫자, char = 문자

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

0개의 댓글