Programming Language

1-3 데이터베이스, SQL 기초

wakelight23 2024. 10. 11. 20:03

문자 데이터도 바꾸고 분류해보고 싶다면

GROUP BY를 사용해서 분류해 보기

예시 TABLE : 음식점

  고객코드 음식점명 음식종류 주문횟수 지역
1 1001 식스맨 양식 2 서울특별시
2 1002 피자리아 양식 6 경기도
3 1003 스케스시 일식 2 강원특별자치도
4 1004 셋찜닭 한식 4 세종특별자치시
5 1005 단리향 중식 8 서울특별시
6 1006 식스맨 양식 5 서울특별시
7 1007 단리향 중식 4 서울특별시

 

- 문제 : '[지역] 음식점이름 (음식종류)' 칼럼을 만들고, 총 주문건수 구하기

(단, 지역은 두 글자로 표현)

 

 우선 흐름을 파악해서 순서대로 작성해 보자.

1. 어떤 테이블에서 데이터를 찾을 것인지 → FROM 음식점

2. 어떤 칼럼(열)을 사용할 것인지 → 지역, 음식점명, 음식종류

3. 어떤 조건을 지정해야 할지 GROUP BY 1

4. 어떤 함수를 사용할 것인지

 CONCAT(=데이터를 합치는 함수),
    SUBSTR(=문자 수를 제한하는 함수)

 

 전체 구문

SELECT CONCAT('[', SUBSTR(지역, 1, 2), '] ',음식점명, ' (', 음식종류, ')'),
               COUNT(1) "총 주문건수"
FROM 음식점
GROUP BY 1

 

결과물

  [지역] 음식점 (음식종류) 총 주문건수
1 [서울] 식스맨 (양식) 2
2 [경기] 피자리아 (양식) 1
3 [강원] 스케스시 (일식) 1
4 [세종] 셋찜닭 (한식) 1
5 [서울] 단리향 (중식) 2

 

궁금한 점 - GROUP BY 1은 무엇인가

구문으로 예를 들어보자면

SELECT 고객번호, 고객이름
                   1                2
FROM 고객정보
GROUP BY 1

 

- SELECT에 사용된 칼럼에서 순서를 말하는 것.

- GROUP BY (칼럼) 을 GROUP BY 1 로 효율적으로 작성이 가능.

 

조건에 따라 형태를 다르게 변경해야 한다면

IF : 원하는 조건에 충족할 때 방법과 아닌 방법을 지정해 줄 때 사용.

- 사용 방법

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

 

 CASE 문 : 조건을 여러가지 지정하고 싶을 때 사용.

- 사용 방법

CASE WHEN 조건1 THEN 값(수식)1
           WHEN 조건2 THEN 값(수식)2
           else 값(수식)3
end

 

예시 TABLE 1 : 주문정보

  고객코드 음식점명 음식종류 음식점 주소
1 4001 셋찜닭 한국음식 경기도 김포시 양촌읍 학운리
2 4002 피자리아 이탈리아음식 인천광역시 옹진군 덕적면 문갑리
3 4003 이겼동 일본음식 울산광역시 중구 우정동
4 4004 타코스 멕시코음식 서울특별시 강서구 등촌동
5 4005 카례스 인도음식 서울특별시 종로구 봉익동
6 4006 바쓰 중국음식 세종특별자치시 부강면 문곡리

 

  IF 문 사용한 예

- 문제 : 음식 종류 중 한국음식을 '한식'으로 나머지는 '기타'로 분류하기.

SELECT 음식점명,
               음식종류 as "변경 전",
               IF(음식종류='한국음식', '한식', '기타') "변경 후"
FROM 주문정보

 

 결과물

  음식점명 변경 전 변경 후
1 셋찜닭 한국음식 한식
2 피자리아 이탈리아음식 기타
3 이겼동 일본음식 기타
4 타코스 멕시코음식 기타
5 카례스 인도음식 기타
6 바쓰 중국음식 기타

 

CASE 사용한 예

- 문제 : 음식종류 중 한국음식이면 '한식', 일본음식과 중국음식이면 '아시아',
            나머지는 '기타'로 분류하기

SELECT 음식점명,
               음식종류 as "변경 전",
               CASE WHEN (음식종류='한국음식') THEN '한식
                          WHEN 음식종류 IN ('일본음식', '중국음식') THEN '아시아'
                          ELSE '기타'
               END as "변경 후"
FROM 주문정보

 

결과물

  음식점명 변경 전 변경 후
1 셋찜닭 한국음식 한식
2 피자리아 이탈리아음식 기타
3 이겼동 일본음식 아시아
4 타코스 멕시코음식 기타
5 카례스 인도음식 기타
6 바쓰 중국음식 아시아