본문 바로가기
 
 
 
카테고리 없음

MySQL 필드별 그룹화 및 조건 적용 방법 - GROUP BY와 HAVING 활용하기

by mooonstory 2025. 4. 12.

 
반응형

MySQL은 데이터베이스 관리 시스템의 대표주자로, 데이터를 효율적으로 관리하고 분석하는 데 필수적인 도구입니다. 이 글에서는 MySQL의 GROUP BYHAVING 절을 활용하여 데이터를 필드별로 그룹화하고 조건을 적용하는 방법을 자세히 설명하겠습니다. 이를 통해 데이터 분석을 더욱 효과적으로 수행할 수 있습니다.

GROUP BY 절의 이해

GROUP BY 절은 SQL 쿼리에서 데이터를 특정 필드를 기준으로 그룹화하는 데 사용됩니다. 이를 통해 각 그룹에 대한 집계 함수를 사용할 수 있습니다. 예를 들어, 판매 데이터에서 각 제품별 판매량을 집계할 수 있습니다.

다음은 GROUP BY의 기본 문법입니다:

SELECT 필드1, SUM(필드2)
FROM 테이블명
GROUP BY 필드1;

이 문법을 바탕으로 간단한 예제를 보겠습니다. 아래와 같은 판매 데이터가 있다고 가정해 보겠습니다:

제품명 판매량
제품A 10
제품B 20
제품A 15
제품C 30

위 데이터를 바탕으로 각 제품별 총 판매량을 구하는 쿼리는 다음과 같습니다:

SELECT 제품명, SUM(판매량) AS 총판매량
FROM 판매데이터
GROUP BY 제품명;

HAVING 절의 활용

HAVING 절은 GROUP BY로 그룹화한 결과에 필터를 적용할 수 있게 해줍니다. 즉, 집계 함수의 결과에 조건을 걸 수 있습니다. 이를 통해 원하는 결과만 추출할 수 있습니다.

아래는 HAVING 절의 기본 문법입니다:

SELECT 필드1, SUM(필드2)
FROM 테이블명
GROUP BY 필드1
HAVING 조건;

앞서 예제에서 각 제품별 판매량이 20 이상인 제품만 조회하고 싶다면 다음과 같은 쿼리를 사용할 수 있습니다:

SELECT 제품명, SUM(판매량) AS 총판매량
FROM 판매데이터
GROUP BY 제품명
HAVING 총판매량 >= 20;

사례 1: 직원별 급여 분석

가상의 직원 데이터베이스에서 각 부서별 평균 급여를 구해보겠습니다. 다음은 직원 데이터입니다:

부서 직원명 급여
인사부 홍길동 5000
인사부 김철수 6000
개발부 이영희 7000
개발부 박민수 8000

위 데이터를 통해 각 부서의 평균 급여를 계산하는 쿼리는 다음과 같습니다:

SELECT 부서, AVG(급여) AS 평균급여
FROM 직원데이터
GROUP BY 부서;

이 결과를 활용하여 인사부의 평균 급여가 개발부보다 낮은지 여부를 확인할 수 있습니다. 만약 평균 급여가 6000 이상인 부서만 보고 싶다면:

SELECT 부서, AVG(급여) AS 평균급여
FROM 직원데이터
GROUP BY 부서
HAVING 평균급여 >= 6000;

사례 2: 제품별 판매 성과

판매 데이터베이스에서 각 제품의 판매량을 기반으로 성과를 분석해보겠습니다. 아래는 제품 판매 데이터입니다:

제품명 판매량 가격
제품A 100 5000
제품B 200 7000
제품A 150 5000
제품C 300 8000

각 제품의 총 판매금액을 계산하고, 판매량이 200 이상인 제품을 필터링하는 쿼리는 다음과 같습니다:

SELECT 제품명, SUM(판매량 * 가격) AS 총판매금액
FROM 판매데이터
GROUP BY 제품명
HAVING 총판매금액 >= 1000000;

이렇게 하면 특정 판매 성과를 쉽게 추적할 수 있으며, 마케팅 전략을 세우는 데 도움을 줄 수 있습니다.

사례 3: 학생별 과목 점수 분석

학생 데이터베이스에서 각 학생의 과목별 평균 점수를 분석해보겠습니다. 다음은 학생 점수 데이터입니다:

학생명 과목 점수
김영희 수학 90
김영희 영어 85
이순신 수학 95
이순신 영어 70

각 학생의 과목별 평균 점수를 계산하고, 평균 점수가 80점 이상인 학생만 조회하는 쿼리는 다음과 같습니다:

SELECT 학생명, AVG(점수) AS 평균점수
FROM 학생점수
GROUP BY 학생명
HAVING 평균점수 >= 80;

이렇게 하면 성적 관리를 보다 효과적으로 할 수 있으며, 학생들의 학습 성향을 분석하는 데 유용합니다.

실용적인 팁

1. GROUP BY와 ORDER BY를 함께 사용하기
GROUP BY 절로 그룹화한 후 ORDER BY 절을 사용하여 결과를 정렬할 수 있습니다. 예를 들어, 판매량이 높은 순서로 정렬하면 어떤 제품이 인기가 있는지 쉽게 파악할 수 있습니다.

2. 집계 함수의 다양성 활용하기
SUM, AVG, COUNT, MAX, MIN 등의 다양한 집계 함수를 활용하여 데이터 분석의 깊이를 더할 수 있습니다. 이를 통해 단순한 계산을 넘어, 데이터의 통찰력을 얻을 수 있습니다.

3. HAVING 절을 통한 필터링의 중요성
HAVING 절을 사용하여 그룹화된 데이터에 조건을 추가하는 것을 잊지 마세요. 이를 통해 비즈니스 의사 결정에 필요한 정확한 데이터만을 추출할 수 있습니다.

4. 복잡한 쿼리 작성 시 서브쿼리 활용하기
복잡한 데이터 분석이 필요할 경우, 서브쿼리를 사용하여 쿼리를 더욱 세분화할 수 있습니다. 예를 들어, 특정 조건을 만족하는 데이터를 먼저 추출한 후 이를 기반으로 추가적인 분석을 수행할 수 있습니다.

5. 인덱스 활용으로 성능 개선하기
대량의 데이터를 다룰 때는 인덱스를 활용하여 쿼리 성능을 개선하세요. GROUP BY 절을 사용할 때 인덱스를 설정하면 쿼리 실행 속도가 빨라져 효율적인 데이터 처리가 가능합니다.

요약 및 실천 팁


이번 글에서는 MySQL의 GROUP BYHAVING 절을 활용하여 데이터를 그룹화하고 조건을 적용하는 방법을 살펴보았습니다. 각 사례를 통해 실제 데이터 분석에 적용할 수 있는 유용한 정보를 제공했습니다.

실제로 활용할 수 있는 팁으로는 GROUP BY와 ORDER BY의 조합, 다양한 집계 함수의 활용, HAVING 절을 통한 필터링, 서브쿼리의 사용, 인덱스 활용을 통한 성능 개선이 있습니다. 이러한 방법들을 통해 MySQL에서 데이터를 효과적으로 분석하고 유의미한 통찰을 얻으시길 바랍니다.

반응형