group by
group by는 SQL에서 동일한 값을 가진 행들을 그룹화하여 집계 함수와 함께 사용되는 절이다. 데이터를 특정 기준으로 분류하고 각 그룹에 대한 통계를 계산할 때 유용하다.
목차
[숨기기]개요[편집]
group by는 SQL에서 레코드를 하나 이상의 컬럼 값을 기준으로 그룹화할 때 사용하는 명령어이다. 일반적으로는 집계 함수(aggregate function)랑 함께 사용된다.
쉽게 말해서, group by는 "비슷한 애들끼리 묶어서 통계를 내줘"라고 하는 명령어이다.
기본 문법[편집]
SELECT 컬럼1, 집계함수(컬럼2) FROM 테이블명 GROUP BY 컬럼1;
예를 들어 sales라는 테이블이 있고, 여기에는 region(지역)과 amount(판매금액)이라는 컬럼이 있다고 해보자.
SELECT region, SUM(amount) FROM sales GROUP BY region;
이 쿼리는 지역별로 판매금액의 총합을 구하는 것이다. region이 같으면 같은 그룹으로 묶고, 각 그룹에 대해 SUM(amount)를 계산한다.
동작원리[편집]
- 먼저 from 절에 있는 테이블에서 데이터를 불러온다.
- where 절이 있다면 조건에 맞는 행만 필터링한다.
- group by 절이 실행돼서, 지정한 컬럼 값이 같은 것들끼리 묶어준다.
- select 절에 있는 집계 함수가 각 그룹에 대해 계산된다.
- order by가 있으면 그 결과를 정렬한다.
주요 특징[편집]
- 그룹화 기준: 지정한 컬럼 값이 같은 행들을 하나의 그룹으로 묶음
- 집계 함수와 함께 사용: COUNT, SUM, AVG, MAX, MIN 등과 함께 작동
- having 절과 연동: 그룹화된 결과에 대한 필터링 가능
사용 예제[편집]
- 기본 사용법
-- 부서별 직원 수 계산 SELECT department, COUNT(*) as employee_count FROM employees GROUP BY department;
- 다중 컬럼 그룹화
-- 부서별, 직급별 평균 급여 SELECT department, position, AVG(salary) as avg_salary FROM employees GROUP BY department, position;
- HAVING 절 사용
-- 평균 급여가 500만원 이상인 부서만 조회 SELECT department, AVG(salary) as avg_salary FROM employees GROUP BY department HAVING AVG(salary) >= 5000000;
자주 쓰이는 집계 함수[편집]
group by는 보통 다음 집계 함수들과 함께 사용된다
- COUNT() : 항목 수
- SUM() : 합계
- AVG() : 평균
- MAX() : 최댓값
- MIN() : 최솟값
예:
SELECT department, COUNT(*) FROM employees GROUP BY department; → 부서별 직원 수를 계산
group by와 order by의 차이[편집]
- group by는 데이터를 묶기 위한 것이고,
- order by는 결과를 정렬하기 위한 것이다
둘은 함께 자주 쓰이지만, 목적이 다르다.
SELECT department, COUNT(*) as emp_count FROM employees GROUP BY department ORDER BY emp_count DESC;
부서별 직원 수를 계산하고, 직원 수 기준으로 내림차순 정렬.
주의사항[편집]
- select 절에 포함된 컬럼은 group by 절에 명시되거나 집계 함수로 감싸져야 함
- where 절은 그룹화 전에 필터링, having 절은 그룹화 후에 필터링
- NULL 값도 하나의 그룹으로 처리됨
성능 고려사항[편집]
- 그룹화할 컬럼에 인덱스가 있으면 성능 향상
- 그룹화 기준 컬럼 수가 많을수록 성능 저하 가능성
- 대량 데이터 처리 시 메모리 사용량 증가
같이 보기[편집]