[SQL] 집계함수, GROP BY, HAVING 개념과 예제 알아보기

naruddl·2024년 8월 4일


employees 테이블을 만들어 이를 기반으로 예제를 살펴보자! 💨

📌 employees 테이블 생성과 데이터 삽입 쿼리

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50),
    job_title VARCHAR(50),
    location VARCHAR(50),
    salary DECIMAL(10, 2)
);

INSERT INTO employees (employee_id, name, department, job_title, location, salary) VALUES
(1, 'Keroro', 'Sales', 'Manager', 'Seoul', 90000),
(2, 'Giroro', 'Sales', 'Salesperson', 'Seoul', 60000),
(3, 'Kururu', 'HR', 'Recruiter', 'Daegu', 55000),
(4, 'Tamama', 'IT', 'Developer', 'Yeongju', 75000),
(5, 'Dororo', 'IT', 'Manager', 'Yeongju', 85000),
(6, 'Shiro', 'HR', 'Manager', 'Seoul', 80000),
(7, 'Maredo', 'Sales', 'Salesperson', 'Yeongju', 65000);

👀 생성한 employees 테이블 확인

GROUP BY

GROUP BY 절은 데이터를 그룹화하여 집계 함수를 사용해 각 그룹의 요약 정보를 생성한다.

  • 부서별로 몇 명의 직원이 있는지 확인하고 싶을 때 GROUP BY를 사용하면 확인 할 수 있다.

집계함수란?

  • 여러 행으로부터 하나의 결괏값을 반환하는 함수이다.
  • 주로 SELECT 구문 GROUP BY절과 함께 사용되며 주로 평균, 합, 최대, 최소 등을 구하는 데 사용된다.
  • COUNT(*)를 제외하고, 집계 함수는 NULL 값을 무시한다.

1. SUM() - 총 급여 합계

  • 모든 직원의 총 급여를 계산

2. AVG() - 평균 급여

  • 모든 직원의 평균 급여를 계산

3. MAX() - 최고 급여

  • 모든 직원 중 최고 급여를 계산

4. MIN() - 최저 급여

  • 모든 직원 중 최저 급여를 계산

5. COUNT() - 직원 수

  • 전체 직원 수를 계산

부서별 집계 예제

부서별로 총 급여와 평균 급여를 계산

  • 부서별 총 급여
  • 부서별 평균 급여

HAVING

HAVING 절은 집계 함수의 결과를 기반으로 그룹화된 데이터에 대해 조건을 적용한다.
WHERE 절은 행 수준에서 조건을 적용하지만, HAVING은 집계된 결과(그룹화된 데이터)에서 조건을 적용한다는 점에서 차이가 있다.

  • 부서별로 평균 급여를 계산하고, 평균 급여가 70,000 이상인 부서만 필터링하기

WHERE vs HAVING

  • WHERE
    행 단위에서 조건을 필터링한다. 집계 함수는 사용할 수 없다.
  • HAVING
    그룹화된 데이터에서 집계 함수 결과를 기반으로 조건을 필터링한다.
profile
아자!아자! 개발자!

0개의 댓글