본문 바로가기

   
Programming/MySQL

MySQL CASE WHEN GROUP BY(원하는 데이타끼리 그룹핑 하기)

반응형

MySQL CASE WHEN GROUP BY(원하는 데이타끼리 그룹핑 하기)

얼마 전 업무를 보는 중 쿼리문을 만들어야 할 일이 생겼습니다. 중간에 기능이 추가되거나 시간이 바빠서 테이블을 만들다 보면 후에 생길 상황을 대비해 테이블을 만드는 것은 쉬운 일 아닌 것 같습니다.

그러다 보면 현재 운영 중인 DB 또는 넘겨받아 처리해야 하는 데이터를 구분하기 위한 필드가 부족한 경우가 있습니다. 결론은 제가 원하는 데이터들만 그룹으로 묶어 COUNT 합계를 알아보고 싶었습니다.

아래 이미지와 같이 데이터가 있을 때 기존에는 간단히 job 필드 항목을 GROUP BY로 지정하면 직업별로 COUNT를 내는 건 어렵지 않습니다.

 

 

이런 식으로 간단히 쿼리를 작성하면 직업별 인원이 몇 명인지 간단히 확인할 수 있습니다.

SELECT job, COUNT(*) AS count
FROM test_A
GROUP BY job;


 

하지만 제가 원하는 건 기존 DB에 저장된 데이터를 이용해 제가 원하는 것들을 새롭게 그룹을 묶어 COUNT를 내고 싶었습니다. 예를 들어 기존 GROUP BY를 사용해서 묵이지 않은 나이대별 COUNT 합계 같은 것 말입니다.

처음엔 이게 가능한지 궁금했는데 DB를 잘하는 친구에게 물어보니 쉽게 가능하다고 하면서 샘플을 보내 주더군요. 친구 덕분에 쉽게 원하는 데이터를 질의 문을 이용해 간단히 뽑을 수 있었습니다.

결과적으로 CASE WHEN을 사용해 특정 조건에 만족하는 항목들을 걸러낸 가상으로 추가된 필드를 GROUP BY로 묶어 주면 제가 원하는 항목들을 기존 DB 데이터에서 걸러내 간단히 합계를 추출할 수 있었습니다.

SELECT job ,
	CASE 
		WHEN age >= 30 AND age < 40 THEN '30대'
		WHEN age >= 40 AND age < 50 THEN '40대'
    END AS spaces, COUNT(*) AS count
FROM test_A
GROUP BY spaces;


 

위와 같이 쿼리문에 CASE WHEN GROUP BY를 사용하시면 기존 데이터 기준으로 원하는 데이터끼리 묶어 데이터를 뽑아낼 수 있을 겁니다.

쿼리문을 자주 사용하는 사람들에겐 굉장히 간단한 내용일 겁니다. 인터넷에 자료도 많지 않은 것 같기도 하고 저도 알게 되어 간단히 정리해 보았습니다.

반응형