본문 바로가기
# Coding/SQL

MySQL 기본 문법 - 집계 함수

by hxodoo.cookie 2024. 7. 28.

 

집계 함수는 여러 행의 값을 하나의 요약된 결과로 반환하는 함수로, 데이터베이스에서 그룹화된 데이터를 처리할 때 사용됩니다. 이 글에서는  각 집계 함수에 대해 자세히 알아보겠습니다.

 

 

 

 

MySQL 집계함수

 

 

 

 

 

집계 함수란?

 

MySQL의 집계 함수는 여러 행의 데이터를 하나의 요약된 결과로 변환하여 반환하는 함수로, 주로 통계치를 계산하거나 데이터를 요약할 때 사용됩니다. 예를 들어, 특정 컬럼의 값의 합계를 계산하거나, 평균을 구하거나, 최솟값이나 최댓값을 찾는 등의 작업을 수행할 수 있습니다.

 

집계 함수의 필요성

데이터베이스에는 방대한 양의 데이터가 저장되어 있습니다. 이러한 데이터를 분석하고 유의미한 정보를 추출하기 위해서는 데이터를 요약하고 통계치를 계산하는 과정이 필요합니다. 집계 함수를 사용하면 복잡한 데이터셋에서 필요한 정보를 빠르고 정확하게 추출할 수 있습니다.

 

 

 


주요 집계 함수 소개

 

MySQL에서 제공하는 주요 집계 함수에는 COUNT(), SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT(), VARIANCE(), STDDEV()등이 있습니다.  각 함수의 사용 예제를  보며 실무에서 많이 사용되는 주요 집계 함수들을 자세히 알아보겠습니다.

 

 

 

-- 집계 함수를 테스트하기 위한 'employees' 테이블을 설계 예시

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

 

 

 

-- 집계 함수를 테스트하기 위한 'employees' 샘플 데이터

INSERT INTO employees (employee_name, department_id, job_title, salary, hire_date) VALUES
('John Doe', 1, 'Manager', 7000.00, '2020-01-15'),
('Jane Smith', 1, 'Assistant Manager', 5500.00, '2019-03-23'),
('Jim Brown', 2, 'Developer', 6000.00, '2018-07-11'),
('Emily White', 2, 'Developer', 6200.00, '2017-05-21'),
('Michael Green', 3, 'Designer', 4800.00, '2021-11-02'),
('Sarah Black', 3, 'Designer', 5000.00, '2021-09-19'),
('David Blue', 1, 'Manager', 7500.00, '2015-02-17'),
('Samantha Red', 2, 'Developer', 5800.00, '2016-12-25'),
('Chris Yellow', 3, 'Designer', 5100.00, '2022-01-10'),
('Laura Purple', 1, 'Assistant Manager', 5300.00, '2018-08-05');

 

 

 

 

 

1. COUNT() 함수

COUNT() 함수는 특정 컬럼의 값 개수를 세는 데 사용됩니다. 이 함수는 NULL 값을 제외하고 개수를 반환하므로, 전체 행 수를 세거나 특정 조건을 만족하는 행 수를 계산하는 데 유용합니다.

 

 

-- 전체 행 수를 계산
SELECT COUNT(*) FROM employees;

 

 

[RESULT]

+----------+
| COUNT(*) |
+----------+
|       10 |
+----------+

 

 

 

 

-- department_id 컬럼의 NULL이 아닌 값의 개수를 계산
SELECT COUNT(department_id) FROM employees;

 

 

[RESULT]

+----------------------+
| COUNT(department_id) |
+----------------------+
|                   10 |
+----------------------+

 

 

 

 

2. COUNT(DISTINCT 컬럼명) 함수

COUNT(DISTINCT) 함수는 고유한 값의 개수를 세는 데 사용됩니다. 중복을 제거한 고유 값의 개수를 계산할 때 유용합니다.

 

 

-- 부서별로 고유한 직책의 개수를 계산
SELECT department_id, COUNT(DISTINCT job_title) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+---------------------------+
| department_id| COUNT(DISTINCT job_title) |
+--------------+---------------------------+
|            1 |                         2 |
|            2 |                         1 |
|            3 |                         1 |
+--------------+---------------------------+

 

 

 

 

3. SUM() 함수

SUM() 함수는 특정 컬럼의 값 합계를 계산하는 함수입니다. 주로 숫자 데이터를 다룰 때 사용되며, 합계를 통해 총계나 총합을 구할 수 있습니다.

 

 

-- salary 컬럼의 모든 값을 더한 합계를 계산
SELECT SUM(salary) FROM employees;

 

 

[RESULT]

+-------------+
| SUM(salary) |
+-------------+
|     53900.00|
+-------------+

 

 

 

 

-- 부서별 급여의 합계를 계산
SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+-------------+
| department_id| SUM(salary) |
+--------------+-------------+
|            1 |     25300.00|
|            2 |     18000.00|
|            3 |     10600.00|
+--------------+-------------+

 

 

 

 

4. AVG() 함수

AVG() 함수는 특정 컬럼의 값 평균을 계산합니다. 

 

 

-- salary 컬럼의 평균 값을 계산
SELECT AVG(salary) FROM employees;

 

 

[RESULT]

+-------------+
| AVG(salary) |
+-------------+
|     5390.00 |
+-------------+

 

 

 

 

-- 부서별 급여의 평균을 계산
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+-------------+
| department_id| AVG(salary) |
+--------------+-------------+
|            1 |     6325.00 |
|            2 |     6000.00 |
|            3 |     5300.00 |
+--------------+-------------+

 

 

 

 

5. MIN() 함수

MIN() 함수는 특정 컬럼의 최솟값을 반환합니다. 데이터셋에서 가장 작은 값을 찾는 데 유용합니다.

 

 

-- salary 컬럼의 최소 값을 계산
SELECT MIN(salary) FROM employees;

 

 

[RESULT]

+-------------+
| MIN(salary) |
+-------------+
|     4800.00 |
+-------------+

 

 

 

 

-- 부서별 급여의 최소 값을 계산
SELECT department_id, MIN(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+-------------+
| department_id| MIN(salary) |
+--------------+-------------+
|            1 |     5300.00 |
|            2 |     5800.00 |
|            3 |     4800.00 |
+--------------+-------------+

 

 

 

 

6. MAX() 함수

MAX() 함수는 특정 컬럼의 최댓값을 반환합니다. 데이터셋에서 가장 큰 값을 찾는 데 사용됩니다.

 

 

-- salary 컬럼의 최대 값을 계산
SELECT MAX(salary) FROM employees;

 

 

[RESULT]

+-------------+
| MAX(salary) |
+-------------+
|     7500.00 |
+-------------+

 

 

 

 

-- 부서별 급여의 최대 값을 계산
SELECT department_id, MAX(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+-------------+
| department_id| MAX(salary) |
+--------------+-------------+
|            1 |     7500.00 |
|            2 |     6200.00 |
|            3 |     5100.00 |
+--------------+-------------+

 

 

 

 

7. GROUP_CONCAT() 함수

GROUP_CONCAT() 함수는 그룹화된 결과를 하나의 문자열로 결합합니다. 여러 행의 데이터를 쉼표 등으로 구분된 하나의 문자열로 변환할 때 유용합니다.

 

 

-- 모든 직원 이름을 쉼표로 구분된 하나의 문자열로 반환
SELECT GROUP_CONCAT(employee_name) FROM employees;

 

 

[RESULT]

+-------------------------------------------------------+
| GROUP_CONCAT(employee_name)                           |
+-------------------------------------------------------+
| John Doe, Jane Smith, Jim Brown, Emily White,         |
| Michael Green, Sarah Black, David Blue, Samantha Red, |
| Chris Yellow, Laura Purple                            |
+-------------------------------------------------------+

 

 

 

 

-- 부서별로 직원 이름을 쉼표로 구분된 문자열로 반환
SELECT department_id, GROUP_CONCAT(employee_name) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+--------------------------------------------+
| department_id| GROUP_CONCAT(employee_name)                |
+--------------+--------------------------------------------+
|            1 | John Doe, Jane Smith, David Blue,          |
|              | Laura Purple                                |
|            2 | Jim Brown, Emily White, Samantha Red       |
|            3 | Michael Green, Sarah Black, Chris Yellow   |
+--------------+--------------------------------------------+

 

 

 

 

8. VARIANCE() 함수

VARIANCE() 함수는 특정 컬럼의 값 분산을 계산합니다. 분산은 데이터가 평균으로부터 얼마나 떨어져 있는지를 나타내는 척도입니다.

 

 

-- salary 컬럼의 분산을 계산
SELECT VARIANCE(salary) FROM employees;

 

 

[RESULT]

+----------------+
| VARIANCE(salary)|
+----------------+
|    937001.0000 |
+----------------+

 

 

 

 

-- 부서별 급여의 분산을 계산
SELECT department_id, VARIANCE(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+------------------+
| department_id| VARIANCE(salary) |
+--------------+------------------+
|            1 |         760500.00|
|            2 |         326666.67|
|            3 |          20000.00|
+--------------+------------------+

 

 

 

 

9. STDDEV() 함수

STDDEV() 함수는 특정 컬럼의 값 표준편차를 계산합니다. 표준편차는 데이터의 분산 정도를 나타내는 척도로, 분산의 제곱근입니다.

 

 

-- salary 컬럼의 표준편차를 계산
SELECT STDDEV(salary) FROM employees;

 

 

[RESULT]

+----------------+
| STDDEV(salary) |
+----------------+
|     968.90385  |
+----------------+

 

 

 

 

-- 부서별 급여의 표준편차를 계산
SELECT department_id, STDDEV(salary) FROM employees GROUP BY department_id;

 

 

[RESULT]

+--------------+------------------+
| department_id| STDDEV(salary)   |
+--------------+------------------+
|            1 |         872.5826 |
|            2 |         571.4282 |
|            3 |         141.4213 |
+--------------+------------------+

 

 

 

 

 

 


이상으로 MySQL 집계함수의 종류와 사용 예제에 대해 알아보았습니다.