집계 쿼리
집계 함수 (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 같은 기능은 데이터를 요약하고 인사이트를 얻는 데 필수적인 도구들입니다. 이를 활용하면 데이터의 패턴을 보다 쉽게 파악하고, 효과적인 비즈니스 결정을 내릴 수 있는 통계적 정보를 제공할 수 있습니다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 6] WINDOW 함수 (0) | 2024.11.13 |
---|---|
[SQL 개념 정리 5] 연결(JOIN) 쿼리 (0) | 2024.11.13 |
[SQL 개념 정리 4] 변환 쿼리 (0) | 2024.11.13 |
[SQL 개념 정리 2] SQL의 산술 연산자와 합성 연산자 (1) | 2024.11.12 |
[SQL 개념 정리 1] SQL의 개요와 데이터 조회/필터링 쿼리 (0) | 2024.11.12 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!