프로그래밍/DB

[DB] MSSQL GROUBY CASE문 사용

ss-pro 2024. 11. 12. 22:55
반응형

고객 테이블에 주소 정보가 있으며, 주소를 기준으로 시/도로 구분하여 통계를 집계하는 방법을 안내드리겠습니다. 아래는 Customers 테이블 예시와 GROUP BY 및 CASE 문을 사용한 SQL 쿼리 예시입니다.

1. Customers 테이블 생성

우선, 고객 이름과 주소 정보를 포함한 Customers 테이블을 만들겠습니다.

1
CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, CustomerName NVARCHAR(50),
 Address NVARCHAR(100) );

2. 테이블에 예시 데이터 추가

주소는 각 지역에 속하도록 다양한 시/도 정보를 포함하여 넣어줍니다.

1
INSERT INTO Customers (CustomerID, CustomerName, Address) VALUES 
(1'홍길동''서울특별시 강남구'),(2'김철수''경기도 성남시'),
(3'이영희''강원도 춘천시'),(4'박민수''경상북도 포항시'),
(5'최지수''서울특별시 마포구'),(6'윤성호''경상남도 창원시'), 
(7'정민아''경기도 수원시');

3. GROUP BY와 CASE 문을 사용하여 도별로 고객 수 집계 쿼리

이제 도별로 고객 수를 집계하는 쿼리를 작성하겠습니다.

1
SELECT CASE 
WHEN Address LIKE '서울%' THEN '서울특별시'
WHEN Address LIKE '경기%' THEN '경기도' 
WHEN Address LIKE '강원%' THEN '강원도' 
WHEN Address LIKE '경상%' THEN '경상도' ELSE '기타' END AS Region, 
COUNT(CustomerID) AS CustomerCount
FROM Customers 
GROUP BY CASE
WHEN Address LIKE '서울%' THEN '서울특별시' 
WHEN Address LIKE '경기%' THEN '경기도' 
WHEN Address LIKE '강원%' THEN '강원도' 
WHEN Address LIKE '경상%' THEN '경상도' 
ELSE '기타' END;
cs

쿼리 설명

  • CASE 문을 사용하여 주소에서 앞부분을 확인하고, 서울, 경기, 강원, 경상 등의 키워드를 기준으로 도를 구분했습니다.
  • GROUP BY 구문에서 도를 기준으로 그룹화하여 각 지역별 고객 수를 집계했습니다.

결과 예시

이 쿼리를 실행하면 아래와 같은 형식의 결과가 출력됩니다:

서울특별시 2
경기도 2
강원도 1
경상도 2

이렇게 하면 각 도별 고객 수를 쉽게 확인할 수 있습니다.  이와 같이 Group By의 Case문을 사용하면 필요한 데이터를 원하는 그룹을 지어서 조회가 가능합니다.