📌그룹화 하고 조건 부여하기(Group By절, Having절)
실무에서 가장 많이 사용되고, 가장 이해하기 어려운 GROUP BY에 대해 알아보도록 하겠습니다. 이 구문은 실제 데이터를 조회하면서 데이터를 집계해야 할 상황이 생깁니다. 이러한 상황에서 GROUP BY로 특정 컬럼에 대한 그룹화를 할 수 있습니다. 더 나아가 집계 함수 및 조건(Having)을 부여하여 원하는 데이터의 추출이 가능합니다.
📌GROUP BY의 기몬 문법 및 예제
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
member_id | member_age | member_gender | member_name |
1 | 20 | 남성 | 문OO |
2 | 20 | 남성 | 김OO |
3 | 30 | 여성 | 김OO |
4 | 40 | 여성 | 김OO |
5 | 30 | 여성 | 차OO |
6 | 20 | 남성 | 최OO |
7 | 40 | 남성 | 조OO |
8 | 40 | 남성 | 박OO |
9 | 50 | 남성 | 구OO |
🚩위와 같은 회원 예제 테이블이 있다. 위의 테이블에서 GROUP BY를 사용하여 그룹화를 하도록 하겠습니다.
📌GROUP BY - member_age
SELECT member_age
FROM member
GROUP BY member_age;
member_age |
20 |
30 |
40 |
50 |
📌GROUP BY - member_gender
SELECT member_gender
FROM member
GROUP BY member_gender;
member_gender |
남성 |
여성 |
📌자주 사용되는 집계함수
집계 함수 | 사용 결과 |
count | 총 개수 |
sum | 총 합계 |
avg | 평균 |
MAX | 최대 |
MIN | 최소 |
📌집계 함수 사용 예시
SELECT member_gender
, count(*) AS '개수'
FROM member
GROUP BY member_gender;
member_gender | 개수 |
남성 | 6 |
여성 | 3 |
📌그룹화 후 조건 부여 - Having절
SELECT 컬럼,그룹함수(컬럼)
FROM 테이블명
GROUP BY 그룹대상
HAVING 그룹함수 포함 조건
🚩HAVING 절의 기본 형식에서 볼 수 있듯이 GROUP BY와 같이 쓰이며, 그룹 함수에 대한 조건을 걸 수 있는 구문이 바로 HAVING 절 입니다. 위의 형식에 맞춰 간단한 예제를 통해 사용해보도록 하겠습니다.
📌그룹화 후 조건 부여 - Having절 예제
사번(mem_id) | 이름(mem_name) | 부서(mem_dept) | 급여(mem_salary) |
1 | 문OO | 개발팀 | 300 |
2 | 차OO | 인사팀 | 250 |
3 | 김OO | 경호팀 | 220 |
4 | 최OO | 개발팀 | 420 |
5 | 남OO | 인사팀 | 320 |
6 | 정OO | 경호팀 | 255 |
7 | 서OO | 마케팅팀 | 275 |
🚩위와 같은 직원들의 정보를 가지고 있는 member 테이블이 있다. 위의 테이블에서 부서별 평균 급여를 조회해보도록 하겠습니다.
-- 부서별 평균 급여 조회
SELECT mem_dept
, AVG(mem_salary) AS 'avg_salary'
FROM member
GROUP BY mem_dept;
부서(mem_dept) | 평균 급여(avg_salary) |
개발팀 | 360 |
인사팀 | 285 |
경호팀 | 237.5 |
마케팅팀 | 270 |
🚩부서별 평균 급여를 조회하였습니다. 다음 예제에서 이렇게 조회된 상태에서 HAVING 절을 사용하여 조건을 부여할 수 있습니다.
-- 부서별 평균 급여 조회
SELECT mem_dept
, AVG(mem_salary) AS 'avg_salary'
FROM member
GROUP BY mem_dept
HAVING avg_salary > 300
🚩HAVING 절을 사용하여 평균 급여가 300 이상인 부서를 조회하도록 하겠습니다.
부서(mem_dept) | 평균 급여(avg_salary) |
개발팀 | 360 |
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]Like문법 - 특정 문자열 검색하기 (5) | 2023.02.13 |
---|---|
[MySQL]CASE문의 기본 사용법 및 사용 시 주의 사항 (6) | 2023.02.06 |
[MYSQL]문자열 여러 개 합치기 - CONCAT(), CONCAT_WS() (6) | 2023.01.16 |
[MYSQL]ORDER BY절의 다중 정렬 (8) | 2023.01.16 |
[MYSQL]REGEXP(정규 표현식) : 특정 문자열 처리 (7) | 2023.01.13 |