프로그래밍 언어/SQL

[SQL 개념 정리 3] 집계 쿼리

ourkofe's story 2024. 11. 13. 14:00

집계 쿼리


집계 함수 (Aggregate Functions)

SQL의 집계 함수는 여러 행을 하나의 값으로 요약해주는 함수입니다. 집계 함수는 GROUP BY와 함께 자주 사용되며, 데이터를 요약하고 통계적인 정보를 제공할 때 매우 유용합니다.

 

주요 집계 함수

  • COUNT: 특정 열에 있는 행의 개수를 계산합니다.
  • SUM: 특정 열의 합계를 계산합니다.
  • AVG: 특정 열의 평균값을 계산합니다.
  • MIN: 특정 열의 최소값을 반환합니다.
  • MAX: 특정 열의 최대값을 반환합니다.

예시

SELECT COUNT(id) AS total_students
FROM students;

이 쿼리는 students 테이블에서 학생의 전체 수를 계산하여 total_students라는 열로 반환합니다.

SELECT AVG(age) AS average_age
FROM students;

이 쿼리는 students 테이블에서 나이의 평균값을 계산하여 average_age라는 열로 반환합니다.


그룹화: GROUP BY

  • GROUP B는 데이터를 특정 열을 기준으로 그룹화하여 요약할 때 사용합니다. GROUP BY는 집계 함수와 함께 사용하여 그룹별로 데이터를 요약할 수 있습니다.

기본 구조

SELECT 열1, 집계함수(열2)
FROM 테이블이름
GROUP BY 열1;

 

예시

SELECT grade, COUNT(id) AS students_in_grade
FROM students
GROUP BY grade;

이 쿼리는 grade별로 학생 수를 계산하여 각 학년별 학생 수를 students_in_grade라는 열로 반환합니다.

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

이 쿼리는 department별로 직원들의 평균 급여를 계산하여 반환합니다.


그룹화된 데이터 필터링: HAVING

HAVING 절은 GROUP BY로 그룹화된 결과에 대한 조건을 설정하는 데 사용됩니다. WHERE 절과 비슷하지만, HAVING은 집계된 데이터에 조건을 적용할 때 사용합니다.

 

기본 구조

SELECT 열1, 집계함수(열2)
FROM 테이블이름
GROUP BY 열1
HAVING 조건;

 

예제

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

이 쿼리는 department별 평균 급여가 50,000 이상인 부서의 이름과 평균 급여를 반환합니다.

SELECT grade, COUNT(id) AS students_in_grade
FROM students
GROUP BY grade
HAVING COUNT(id) > 30;

이 쿼리는 학년별 학생 수가 30명 이상인 학년과 그 학생 수를 반환합니다.


여러 열을 기준으로 그룹화하기

GROUP BY 절에서 여러 열을 사용하면 다중 열을 기준으로 데이터를 그룹화할 수 있습니다.

 

예시

SELECT department, job_title, COUNT(id) AS count
FROM employees
GROUP BY department, job_title;

이 쿼리는 department와 job_title을 기준으로 데이터를 그룹화하여 각 부서와 직위에 속한 직원 수를 계산합니다.


집계 함수와 ORDER BY 함께 사용하기

집계 결과를 정렬할 때는 ORDER BY 절을 사용할 수 있습니다.

 

예시

SELECT department, COUNT(id) AS employee_count
FROM employees
GROUP BY department
ORDER BY employee_count DESC;

이 쿼리는 각 부서의 직원 수를 계산하고, 직원 수가 많은 순으로 정렬하여 반환합니다.


다양한 집계 함수와 조건 결합하기

집계 함수는 SUM, COUNT, AVG, MIN, MAX 등을 자유롭게 조합하여 사용할 수 있습니다. 예를 들어, 특정 조건에 맞는 평균, 최소, 최대값 등을 함께 조회할 수 있습니다.

 

예시

SELECT department,
       COUNT(id) AS employee_count,
       AVG(salary) AS avg_salary,
       MIN(salary) AS min_salary,
       MAX(salary) AS max_salary
FROM employees
GROUP BY department;

이 쿼리는 각 부서별로 직원 수, 평균 급여, 최소 급여, 최대 급여를 조회하여 요약된 정보를 반환합니다.


다단계 그룹 합계: ROLLUP

ROLLUP은 GROUP BY의 확장 기능으로, 여러 단계의 소계(Subtotal)와 전체 합계(Total)를 계산할 때 사용됩니다. ROLLUP을 통해 각 그룹 레벨에 대한 합계를 한 번에 구할 수 있습니다.

 

기본 사용법

SELECT 열1, 열2, 집계함수(열3)
FROM 테이블이름
GROUP BY 열1, 열2 WITH ROLLUP;

 

예시: 부서별 직위별 급여 합계와 소계, 전체 합계

SELECT department, job_title, SUM(salary) AS total_salary
FROM employees
GROUP BY department, job_title WITH ROLLUP;

 

결과 예시

department job_title total_salary
Sales Manager 90,000
Sales Salesperson 200,000
Sales NULL 290,000
HR Recruiter 80,000
HR NULL 80,000
NULL NULL 370,000
  • 각 job_title별 합계와 department별 소계, 전체 합계가 계산됩니다.
  • department와 job_title이 모두 NULL인 행은 전체 합계를 나타냅니다.

예제: 연도 및 월별 판매 합계

SELECT year, month, SUM(sales) AS total_sales
FROM sales_data
GROUP BY year, month WITH ROLLUP;

이 쿼리는 연도와 월별로 판매 합계를 계산하며, 각 연도의 소계와 전체 합계를 함께 제공합니다.


SQL의 집계 함수와 GROUP BY, HAVING, 그리고 ROLLUP 같은 기능은 데이터를 요약하고 인사이트를 얻는 데 필수적인 도구들입니다. 이를 활용하면 데이터의 패턴을 보다 쉽게 파악하고, 효과적인 비즈니스 결정을 내릴 수 있는 통계적 정보를 제공할 수 있습니다.

728x90