2024.06.18 TIL - SQL 강의 (replace, substr, concat)

Innes·2024년 6월 18일
0

TIL(Today I Learned)

목록 보기
135/147
post-thumbnail

컬럼 값의 특정 문자 변경 (replace)

select restaurant_name "원래 상점명",
       replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%'
  • replace : 특정 문자로 바꿔줘
  • where : 'Blue Ribbon'이 들어간 데이터만 조회해줘 (조건절)
  • like : 비슷한 데이터를 뽑아주는 구문

전체 문자 중 원하는 문자만 남기기 (substr)

select addr "원래 주소",
       substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'
  • substr() : 특정한 문자를 뽑아주는 구문
    (substring 써도 됨)
  • 1 : 어디서부터 뽑아올지 (첫번째 문자부터)
  • 2 : 얼마나 뽑아올지 (글자수 - 2글자)

원하는 데이터들 붙여주기 (concat)

select restaurant_name "원래 이름",   
       addr "원래 주소",
       concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'
  • concat() : 원하는 데이터들 붙여주기

실습

  1. 서울 지역의 음식 타입별 평균 음식 주문금액 구하기 (출력 : ‘서울’, ‘타입’, ‘평균 금액’)
// 내 답변

SELECT  SUBSTR(addr, 1, 2) "지역",
		cuisine_type "타입",
		avg(price) '평균 금액'
from food_orders 
where addr like '%서울특별시%'
group by cuisine_type 
// 튜터님 답변

SELECT  SUBSTR(addr, 1, 2) "지역",
		cuisine_type "타입",
		avg(price) '평균 금액'
from food_orders 
where addr like '%서울%'
group by 1, 2
  • group by 1, 2 : 첫번째 컬럼, 두번째 컬럼 기준으로 묶겠다는 의미
    (1 컬럼이 사실상 값이 전부 서울이라서 의미가 없음)

  1. 이메일 도메인별 고객 수와 평균 연령 구하기
select SUBSTR(email, 10) "도메인",
		count(1) "고객 수",
		avg(age) "평균 연령"
from customers 
group by 1
  • substr 에서 맨 끝자리까지 구하고 싶으면 세번째 매개변수는 생략
  • count 전부다 셀거면 안에 * 혹은 1

  1. '[지역(시도)] 음식점이름 (음식종류)’ 컬럼을 만들고, 총 주문건수 구하기
SELECT  concat('[', substr(addr, 1, 2), ']', restaurant_name, ' (', cuisine_type, ')') "음식점",
count(1) "주문 건수"
FROM food_orders 
group by 1

profile
무서운 속도로 흡수하는 스폰지 개발자 🧽

0개의 댓글