기본 문법
SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE conditions
GROUP BY column1, column2
HAVING conditions
ORDER BY column1;
- 그룹화 기준 열(Column)
- GROUP BY 뒤에 오는 열이 데이터 그룹화 기준이 됩니다.
- 집계 함수(Aggregate Function)
- 각 그룹에 대해 COUNT, SUM, AVG, MAX, MIN과 같은 집계 함수가 적용됩니다.
- WHERE 절과 HAVING 절
- WHERE : 그룹화 전에 데이터를 필터링
- HAVING : 그룹화 이후, 집계 결과를 필터링
- 정렬(ORDER BY)
- GROUP BY의 결과를 정렬할 수 있습니다.
- HAVING을 사용하는 이유
- 그룹화된 데이터에 조건을 적용할 필요가 있을 때
- ex. 집계 함수(SUM, AVG) 결과를 기준으로 필터링
- WHERE로는 처리할 수 없는 집계 조건을 적용
- ex. 부서별 총 매출을 기준으로 조건 설정
- 그룹화된 데이터에 조건을 적용할 필요가 있을 때
예제
1. 직원 테이블에서 부서별 직원 수를 계산
(1) Table : Employees
| emp_id | name | department | salary |
| 1 | Alice | HR | 5000 |
| 2 | Bob | IT | 6000 |
| 3 | Charlie | IT | 7000 |
| 4 | David | HR | 4000 |
| 5 | Eve | Marketing | 4500 |
(2) Query
SELECT department, COUNT(*) AS employee_count
FROM Employees
GROUP BY department;
(3) Result
| department | employee_count |
| HR | 2 |
| IT | 2 |
| Marketing | 1 |
2. 집계 함수 활용 : 부서별 평균 급여를 계산
(1) Table : 1번 Employees 참조
(2) Query
SELECT department, AVG(salary) AS avg_salary
FROM Employees
GROUP BY department;
(3) Result
| department | avg_salary |
| HR | 4500.00 |
| IT | 6500.00 |
| Marketing | 4500.00 |
3. WHERE와 함께 사용 : 급여가 4500 이상인 직원만 포함한 부서별 직원 수 계산
(1) Table : 1번 Employees 참조
(2) Query
SELECT department, COUNT(*) AS employee_count
FROM Employees
WHERE salary >= 4500
GROUP BY department;
(3) Result
| department | employee_count |
| HR | 1 |
| IT | 2 |
| Marketing | 1 |
4. HAVING과 함께 사용 : 부서별 평균 급여가 5000 이상인 부서만 조회
(1) Table : 1번 Employees 참조
(2) Query
SELECT department, AVG(salary) AS avg_salary
FROM Employees
GROUP BY department
HAVING avg_salary >= 5000;
(3) Result
| department | avg_salary |
| HR | 4500.00 |
| IT | 6500.00 |
5. 다중 열 그룹화 : 부서와 급여를 기준으로 그룹화하여 직원 수 계산
(1) Table : 1번 Employees 참조
(2) Query
SELECT department, salary, COUNT(*) AS employee_count
FROM Employees
GROUP BY department, salary;
(3) Result
| department | salary | employee_count |
| HR | 4000 | 1 |
| HR | 5000 | 1 |
| IT | 6000 | 1 |
| IT | 7000 | 1 |
| Marketing | 4500 | 1 |
주의사항
1. GROUP BY와 SELECT 열의 일치
- GROUP BY에 없는 열을 SELECT에 포함하려면, 해당 열에 집계 함수를 적용해야 합니다.
- 그렇지 않으면 오류가 발생합니다.
(1) 잘못된 쿼리
SELECT department, salary
FROM Employees
GROUP BY department;
(2) 올바른 쿼리
SELECT department, MAX(salary) AS max_salary
FROM Employees
GROUP BY department;
요약
- GROUP BY는 데이터를 그룹화하여 요약 정보를 제공하는 강력한 도구입니다.
- 주로 집계 함수와 함께 사용되며, WHERE, HAVING, ORDER BY 등과 조합하여 더 복잡한 쿼리를 작성할 수 있습니다.
- 데이터의 구조와 집계 요구사항에 따라 적절하게 활용하면 데이터 분석과 통계에 유용합니다.
출처
OpenAI의 ChatGPT (https://openai.com)
'DB > MySQL' 카테고리의 다른 글
| 서브쿼리(Subquery) (0) | 2025.01.06 |
|---|---|
| GROUP_CONCAT feat. DISTINCT (0) | 2025.01.03 |
| JOIN (2) | 2025.01.01 |
| SELECT문 실행 순서 (0) | 2024.12.30 |
| AUTO_INCREMENT (0) | 2024.12.29 |