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);
특정 열의 값이 존재하는 행의 개수를 반환합니다.
SELECT COUNT(*) FROM employees;
이 쿼리는 employees
테이블의 전체 행 수를 반환합니다.
COUNT(*) | |
---|---|
33 |
숫자 열의 값들의 합계를 계산합니다.
SELECT SUM(salary) FROM employees;
이 쿼리는 employees
테이블에서 모든 직원의 급여 합계를 반환합니다.
SUM(salary) | |
---|---|
241000.00 |
숫자 열의 평균값을 계산합니다.
SELECT AVG(salary) FROM employees;
이 쿼리는 employees
테이블에서 모든 직원의 급여 평균을 반환합니다.
AVG(salary) | |
---|---|
7303.030303 |
특정 열에서 가장 큰 값을 반환합니다.
SELECT MAX(salary) FROM employees;
이 쿼리는 employees
테이블에서 가장 높은 급여를 반환합니다.
MAX(salary) | |
---|---|
10000.00 |
특정 열에서 가장 작은 값을 반환합니다.
SELECT MIN(salary) FROM employees;
이 쿼리는 employees
테이블에서 가장 낮은 급여를 반환합니다.
MAX(salary) | |
---|---|
5000.00 |
집계 함수는 GROUP BY
와 함께 사용되어 데이터를 그룹화하여 각 그룹에 대해 요약 값을 계산할 수 있습니다.
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
이 쿼리는 employees
테이블에서 부서별로 직원 수를 반환합니다.
department | COUNT(*) | |
---|---|---|
HR | 6 | |
IT | 7 | |
Finance | 6 | |
Marketing | 7 | |
Sales | 7 |
HAVING
은 GROUP BY
와 함께 사용되며, 그룹화된 결과에 조건을 적용할 때 사용됩니다.
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) >= 7;
이 쿼리는 직원 수가 7명 이상인 부서만 반환합니다.
department | COUNT(*) | |
---|---|---|
IT | 7 | |
Marketing | 7 | |
Sales | 7 |
1 ) 서브쿼리에서 집계 결과를 필터링하기
메인 쿼리에서 서브쿼리를 사용하여 특정 조건을 만족하는 집계 결과를 필터링할 수 있습니다.
각 부서에서 평균 급여보다 높은 급여를 받는 직원 목록을 출력합니다.
SELECT employee_name, salary, department
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = employees.department
);
서브쿼리에서 특정 부서(department
)의 평균 급여를 계산한 후, 메인 쿼리에서는 그 부서의 평균 급여보다 높은 급여를 받는 직원을 필터링합니다.
employee_name | salary | department | |
---|---|---|---|
David | 8000.00 | IT | |
Hank | 7500.00 | IT | |
Nina | 7600.00 | IT | |
Paul | 7900.00 | IT | |
Eve | 9000.00 | Finance | |
Frank | 10000.00 | Finance | |
Ivy | 9500.00 | Finance | |
Quinn | 9800.00 | Finance | |
Ray | 9700.00 | Finance | |
Sam | 9200.00 | Finance | |
Ethan | 7600.00 | Sales | |
Fiona | 7400.00 | Sales |
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_name | salary | department | |
---|---|---|---|
Karen | 6200.00 | HR | |
David | 8000.00 | IT | |
Frank | 10000.00 | Finance | |
Vera | 7100.00 | Marketing | |
Ethan | 7600.00 | Sales |
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명 이상인 부서만 반환합니다. 메인 쿼리에서는 이 부서들에 대해 총 급여 합계를 계산합니다.
department | total_salary | |
---|---|---|
IT | 52500.00 | |
Marketing | 47400.00 | |
Sales | 50300.00 |