본문 바로가기

SQL/내용 정리

문자 데이터 변경(SUBSTR, CONCAT)+GROUP BY 같이 사용

SUBSTR(문자열 자르기)
  • 문자열의 특정 위치부터 일정 길이만큼 잘라서 반환하는 함수(필요한 부분만 추출)
  • 인덱스는 1부터 시작 ★
  • 길이 생략시 → 끝까지 반환
    • ex. “서울시 강남구” → 앞 2글자만 → “서울”
-- 기본 문법

SUBSTR(문자열, 시작위치, 길이)

 

CONCAT(문자열 합치기)
  • 여러 문자열을 하나의 문자열로 결합하는 함수
  • 여러 값 한 번에 결합 가능
  • 문자열 + 컬럼 혼합 가능 
    • ex. “서울” + “맛집” → “서울맛집”

※ 가독성을 위해 별칭(AS(alias)) 사용 권장

-- 기본 문법

CONCAT(문자열1, 문자열2, ...)

 

 


 

 

SUBSTR, CONCAT 실습

 

 

[쿼리 작성 전, 고려 사항]

   ① 어떤 테이블에서 어떤 데이터를 뽑을지
   ② 어떤 컬럼을 이용지
   ③ 어떤 조건을 지정할지
   ④ 어떤 함수를 이용할지

 

-- 실습 1. 서울 지역의 음식 타입별 평균 음식 주문금액 구하기(출력 : '서울', '타입', '평균 금액')

SELECT
    substr(addr, 1, 2) AS "지역",   -- 주소(addr)에서 앞 2글자 추출 → 지역(예: 서울)
    cuisine_type,                  -- 음식 타입 컬럼
    AVG(price) AS "평균 금액"       -- 가격 평균 계산
FROM
    food_orders                    -- 주문 테이블
WHERE
    addr LIKE '%서울%'              -- 주소에 '서울' 포함된 데이터만 필터링
GROUP BY 1, 2;                     -- 1번(지역), 2번(음식타입) 기준으로 그룹화
-- 실습 2. 이메일 도메인별 고객 수와 평균 연령 구하기

SELECT
    substr(email, 10) AS "도메인",   -- 이메일에서 10번째 문자부터 잘라 도메인 추출
    count(1) AS "고객 수",           -- 행 개수 = 고객 수
    avg(age) AS "평균 연령"          -- 나이 평균 계산
FROM
    customers                       -- 고객 테이블
GROUP BY 1;                         -- 1번 컬럼(도메인) 기준으로 그룹화
-- 실습 3. '[지역(시도)] 음식점이름 (음식종류)' 컬럼을 만들고, 총 주문건수 구하기

SELECT
    concat('[', substr(addr, 1, 2), ']', restaurant_name, ' (',
            cuisine_type, ')') AS "음식점",   -- [지역]음식점명 (타입) 형태로 문자열 조합
    count(1) AS "주문 건수"                  -- 주문 건수(행 개수)
FROM
    food_orders                              -- 주문 테이블
GROUP BY 1;                                  -- 1번 컬럼(가공된 음식점 문자열) 기준 그룹화