[MySQL] 집계 함수

Main·2024년 8월 31일
0

MySQL

목록 보기
5/13
post-thumbnail

MySQL의 집계 함수(Aggregate Function)는 여러 행(row)의 값을 기반으로 단일 결과를 계산하는 함수입니다. 주로 그룹화된 데이터에 대해 요약 정보를 제공하는 데 사용되며, SELECT 구문과 함께 자주 사용됩니다.

예시 테이블

아래 코드를 입력하여 table를 생성해주세요.

CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT PRIMARY KEY,
    employee_name VARCHAR(100) NOT NULL,
    department VARCHAR(100) NOT NULL,
    salary DECIMAL(10, 2) NOT NULL
);

INSERT INTO employees (employee_name, department, salary)
VALUES 
    -- HR 부서
    ('Alice', 'HR', 5000.00),
    ('Bob', 'HR', 6000.00),
    ('Grace', 'HR', 5500.00),
    ('Jack', 'HR', 5800.00),
    ('Karen', 'HR', 6200.00),
    ('Leo', 'HR', 5100.00),

    -- IT 부서
    ('Charlie', 'IT', 7000.00),
    ('David', 'IT', 8000.00),
    ('Hank', 'IT', 7500.00),
    ('Mia', 'IT', 7200.00),
    ('Nina', 'IT', 7600.00),
    ('Oscar', 'IT', 7300.00),
    ('Paul', 'IT', 7900.00),

    -- Finance 부서
    ('Eve', 'Finance', 9000.00),
    ('Frank', 'Finance', 10000.00),
    ('Ivy', 'Finance', 9500.00),
    ('Quinn', 'Finance', 9800.00),
    ('Ray', 'Finance', 9700.00),
    ('Sam', 'Finance', 9200.00),

    -- Marketing 부서
    ('Tom', 'Marketing', 6700.00),
    ('Uma', 'Marketing', 6900.00),
    ('Vera', 'Marketing', 7100.00),
    ('Walt', 'Marketing', 6800.00),
    ('Xena', 'Marketing', 6500.00),
    ('Yara', 'Marketing', 6400.00),
    ('Zane', 'Marketing', 7000.00),

    -- Sales 부서
    ('Adam', 'Sales', 7100.00),
    ('Bella', 'Sales', 7200.00),
    ('Chris', 'Sales', 7300.00),
    ('Diana', 'Sales', 6800.00),
    ('Ethan', 'Sales', 7600.00),
    ('Fiona', 'Sales', 7400.00),
    ('George', 'Sales', 6900.00);

COUNT()

특정 열의 값이 존재하는 행의 개수를 반환합니다.

SELECT COUNT(*) FROM employees;

이 쿼리는 employees 테이블의 전체 행 수를 반환합니다.

COUNT(*)
33

SUM()

숫자 열의 값들의 합계를 계산합니다.

SELECT SUM(salary) FROM employees;

이 쿼리는 employees 테이블에서 모든 직원의 급여 합계를 반환합니다.

SUM(salary)
241000.00

AVG()

숫자 열의 평균값을 계산합니다.

SELECT AVG(salary) FROM employees;

이 쿼리는 employees 테이블에서 모든 직원의 급여 평균을 반환합니다.

AVG(salary)
7303.030303

MAX()

특정 열에서 가장 큰 값을 반환합니다.

SELECT MAX(salary) FROM employees;

이 쿼리는 employees 테이블에서 가장 높은 급여를 반환합니다.

MAX(salary)
10000.00

MIN()

특정 열에서 가장 작은 값을 반환합니다.

SELECT MIN(salary) FROM employees;

이 쿼리는 employees 테이블에서 가장 낮은 급여를 반환합니다.

MAX(salary)
5000.00

GROUP BY와 함께 사용

집계 함수는 GROUP BY 와 함께 사용되어 데이터를 그룹화하여 각 그룹에 대해 요약 값을 계산할 수 있습니다.

SELECT department, COUNT(*)
FROM employees
GROUP BY department;

이 쿼리는 employees 테이블에서 부서별로 직원 수를 반환합니다.

departmentCOUNT(*)
HR6
IT7
Finance6
Marketing7
Sales7

HAVING과 함께 사용

HAVINGGROUP BY와 함께 사용되며, 그룹화된 결과에 조건을 적용할 때 사용됩니다.

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) >= 7;

이 쿼리는 직원 수가 7명 이상인 부서만 반환합니다.

departmentCOUNT(*)
IT7
Marketing7
Sales7

서브 쿼리를 이용하여 집계함수 사용

1 ) 서브쿼리에서 집계 결과를 필터링하기

메인 쿼리에서 서브쿼리를 사용하여 특정 조건을 만족하는 집계 결과를 필터링할 수 있습니다.

각 부서에서 평균 급여보다 높은 급여를 받는 직원 목록을 출력합니다.

SELECT employee_name, salary, department
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
    WHERE department = employees.department
);

서브쿼리에서 특정 부서(department)의 평균 급여를 계산한 후, 메인 쿼리에서는 그 부서의 평균 급여보다 높은 급여를 받는 직원을 필터링합니다.

employee_namesalarydepartment
David8000.00IT
Hank7500.00IT
Nina7600.00IT
Paul7900.00IT
Eve9000.00Finance
Frank10000.00Finance
Ivy9500.00Finance
Quinn9800.00Finance
Ray9700.00Finance
Sam9200.00Finance
Ethan7600.00Sales
Fiona7400.00Sales

2 ) 서브쿼리에서 집계 결과를 메인 쿼리에 제공하기

서브쿼리의 결과를 메인 쿼리에서 사용하여 추가적인 계산이나 필터링을 수행할 수 있습니다.

가장 높은 급여를 받는 직원의 이름을 출력합니다.

SELECT employee_name
FROM employees
WHERE salary = (
    SELECT MAX(salary)
    FROM employees
);

서브쿼리에서 MAX(salary)를 사용해 전체 직원 중 가장 높은 급여를 계산하고, 메인 쿼리에서 이 급여를 받는 직원의 이름을 찾습니다.

employee_name
Frank

3 ) GROUP BY와 함께 서브쿼리에서 집계 함수 사용하기
서브쿼리에서 GROUP BY와 함께 집계 함수를 사용하여 그룹별로 요약된 데이터를 얻고, 이를 메인 쿼리에서 활용할 수 있습니다.

각 부서에서 가장 높은 급여를 받는 직원의 이름과 급여를 출력합니다.

SELECT employee_name, salary, department
FROM employees AS e
WHERE salary = (
    SELECT MAX(salary)
    FROM employees
    WHERE department = e.department
    GROUP BY department
);

서브쿼리에서 각 부서별로 가장 높은 급여를 계산하고, 메인 쿼리에서 해당 부서의 최고 급여를 받는 직원을 찾습니다.

employee_namesalarydepartment
Karen6200.00HR
David8000.00IT
Frank10000.00Finance
Vera7100.00Marketing
Ethan7600.00Sales

4 ) 서브쿼리를 이용해 조건부 집계 함수 사용

서브쿼리를 사용하여 특정 조건에 따라 집계 함수를 계산할 수 있습니다.

각 부서의 총 급여 합계를 출력하되, 부서별 직원 수가 7명 이상인 경우에만 해당 정보를 출력합니다.

SELECT department, SUM(salary) AS total_salary
FROM employees
WHERE department IN (
    SELECT department
    FROM employees
    GROUP BY department
    HAVING COUNT(*) >= 7
)
GROUP BY department;

서브쿼리에서 부서별로 직원 수를 계산하여 7명 이상인 부서만 반환합니다. 메인 쿼리에서는 이 부서들에 대해 총 급여 합계를 계산합니다.

departmenttotal_salary
IT52500.00
Marketing47400.00
Sales50300.00
profile
함께 개선하는 프론트엔드 개발자

0개의 댓글