DB/MySQL

GROUP BY

annovation 2025. 1. 2. 08:52

기본 문법 

SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE conditions
GROUP BY column1, column2
HAVING conditions
ORDER BY column1;

 

  1. 그룹화 기준 열(Column)
    • GROUP BY 뒤에 오는 열이 데이터 그룹화 기준이 됩니다.
  2. 집계 함수(Aggregate Function)
    • 각 그룹에 대해 COUNT, SUM, AVG, MAX, MIN과 같은 집계 함수가 적용됩니다.
  3. WHERE 절과 HAVING 절
    • WHERE : 그룹화 전에 데이터를 필터링
    • HAVING : 그룹화 이후, 집계 결과를 필터링
  4. 정렬(ORDER BY)
    • GROUP BY의 결과를 정렬할 수 있습니다.
  5. HAVING을 사용하는 이유
    1. 그룹화된 데이터에 조건을 적용할 필요가 있을 때
      • ex. 집계 함수(SUM, AVG) 결과를 기준으로 필터링
    2. 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