요약
SQL GROUP BY는 동일한 값을 가진 데이터를 그룹으로 묶어 집계하는 SQL 문법입니다. COUNT, SUM, AVG 같은 집계 함수와 함께 사용되며 SQLD 시험에서도 매우 높은 비중으로 출제됩니다. 이번 글에서는 SQL GROUP BY의 개념부터 실전 예제, HAVING과의 차이점, SQLD 시험 출제 포인트까지 자세히 알아보겠습니다.
SQL GROUP BY란?
SQL GROUP BY는 특정 컬럼의 같은 값을 하나의 그룹으로 묶는 SQL 문법입니다.
예를 들어 회사에 직원이 여러 명 있다고 가정해보겠습니다.
직원 개수를 부서별로 집계하거나 부서별 평균 급여를 계산하려면 데이터를 그룹으로 묶어야 합니다.
이때 사용하는 것이 SQL GROUP BY입니다.
SQL GROUP BY는 데이터 분석 업무에서 매우 자주 사용되며 SQLD 시험에서도 핵심 출제 영역입니다. 더 많은 정보를 확인하고 SQL GROUP BY 개념을 익혀보세요.
SQL GROUP BY가 필요한 이유
다음과 같은 직원 데이터가 있다고 가정해보겠습니다.
| 이름 | 부서번호 | 급여 |
|---|---|---|
| SMITH | 10 | 1000 |
| ALLEN | 10 | 2000 |
| WARD | 20 | 1500 |
| JONES | 20 | 2500 |
부서별 직원 수를 알고 싶다면 단순 SELECT만으로는 어렵습니다.
이럴 때 SQL GROUP BY를 사용합니다.
데이터를 그룹 단위로 묶어서 분석할 수 있기 때문입니다.
더 많은 정보를 확인하고 데이터 집계 방법을 이해해보세요.
SQL GROUP BY 기본 문법
SQL GROUP BY의 기본 문법은 다음과 같습니다.
SELECT 그룹컬럼,
집계함수
FROM 테이블명
GROUP BY 그룹컬럼;
실제 예제를 살펴보겠습니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO;
위 SQL GROUP BY는 부서번호별 직원 수를 계산합니다.
GROUP BY 뒤에 작성한 컬럼을 기준으로 데이터가 묶입니다.
더 많은 정보를 확인하고 SQL GROUP BY 기본 구조를 이해해보세요.
COUNT와 GROUP BY 함께 사용하기
가장 많이 사용하는 형태입니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO;
실행 결과 예시
| 부서번호 | 직원수 |
|---|---|
| 10 | 3 |
| 20 | 5 |
| 30 | 6 |
SQL GROUP BY를 사용하면 부서별 직원 수를 한 번에 확인할 수 있습니다.
SQLD 시험에서도 COUNT와 SQL GROUP BY 조합은 매우 자주 출제됩니다. 더 많은 정보를 확인하고 SQLD 핵심 개념을 학습해보세요.
SUM과 GROUP BY 함께 사용하기
부서별 급여 총합을 계산해보겠습니다.
SELECT DEPTNO,
SUM(SAL)
FROM EMP
GROUP BY DEPTNO;
결과 예시
| 부서번호 | 급여합계 |
|---|---|
| 10 | 8750 |
| 20 | 10875 |
| 30 | 9400 |
SQL GROUP BY를 활용하면 그룹별 합계를 쉽게 계산할 수 있습니다.
실무에서도 매출 합계, 생산량 합계 등을 계산할 때 자주 사용합니다. 더 많은 정보를 확인하고 SQL 집계 기능을 익혀보세요.
AVG와 GROUP BY 함께 사용하기
부서별 평균 급여를 계산해보겠습니다.
SELECT DEPTNO,
AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
결과 예시
| 부서번호 | 평균급여 |
|---|---|
| 10 | 2916 |
| 20 | 2175 |
| 30 | 1566 |
데이터 분석 업무에서는 평균 계산이 매우 중요합니다.
SQL GROUP BY와 AVG 함수 조합은 실무에서 매우 자주 사용됩니다. 더 많은 정보를 확인하고 데이터 분석 기초를 학습해보세요.
SQL GROUP BY 사용 시 주의사항
SQLD 시험에서 가장 많이 출제되는 부분입니다.
다음 SQL을 살펴보겠습니다.
SELECT DEPTNO,
ENAME,
COUNT(*)
FROM EMP
GROUP BY DEPTNO;
이 SQL은 오류가 발생합니다.
왜냐하면 ENAME은 GROUP BY에 포함되지 않았기 때문입니다.
올바른 SQL은 다음과 같습니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO;
또는
SELECT DEPTNO,
ENAME,
COUNT(*)
FROM EMP
GROUP BY DEPTNO, ENAME;
SQL GROUP BY에서는 SELECT 절에 있는 일반 컬럼이 GROUP BY에 포함되어야 합니다.
더 많은 정보를 확인하고 SQL GROUP BY 규칙을 익혀보세요.
여러 컬럼으로 GROUP BY 하기
SQL GROUP BY는 여러 개의 컬럼을 기준으로 그룹을 만들 수 있습니다.
SELECT DEPTNO,
JOB,
COUNT(*)
FROM EMP
GROUP BY DEPTNO, JOB;
실행 결과 예시
| 부서번호 | 직무 | 직원수 |
|---|---|---|
| 10 | MANAGER | 1 |
| 10 | CLERK | 2 |
| 20 | ANALYST | 2 |
이처럼 SQL GROUP BY는 복합 조건 그룹화도 가능합니다.
더 많은 정보를 확인하고 SQL 활용 능력을 높여보세요.
GROUP BY와 ORDER BY 차이
SQLD 시험에서 자주 나오는 비교 문제입니다.
| 구분 | GROUP BY | ORDER BY |
|---|---|---|
| 목적 | 그룹 생성 | 데이터 정렬 |
| 결과 개수 | 감소 가능 | 동일 |
| 집계 함수 사용 | 가능 | 불가능 |
| SQLD 출제 빈도 | 매우 높음 | 매우 높음 |
GROUP BY는 데이터를 묶고 ORDER BY는 데이터를 정렬합니다.
두 개념을 혼동하지 않는 것이 중요합니다. 더 많은 정보를 확인하고 SQL 핵심 개념을 정리해보세요.
HAVING과 GROUP BY 관계
GROUP BY를 학습하면 반드시 HAVING도 함께 이해해야 합니다.
예를 들어 직원 수가 3명 이상인 부서만 조회해보겠습니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 3;
HAVING은 그룹화된 결과에 조건을 적용합니다.
SQLD 시험에서도 GROUP BY와 HAVING을 함께 묻는 문제가 자주 출제됩니다. 더 많은 정보를 확인하고 HAVING 개념도 함께 학습해보세요.
SQLD 시험에서 GROUP BY가 중요한 이유
SQLD 시험에서는 SQL GROUP BY 문제가 매우 높은 비중으로 출제됩니다.
특히 다음 개념은 반드시 이해해야 합니다.
| 출제 포인트 | 중요도 |
|---|---|
| COUNT + GROUP BY | 매우 높음 |
| SUM + GROUP BY | 매우 높음 |
| AVG + GROUP BY | 높음 |
| GROUP BY 규칙 | 매우 높음 |
| HAVING | 매우 높음 |
| 실행 결과 예측 | 매우 높음 |
실제로 SQLD 기출문제를 보면 SQL GROUP BY 관련 문제가 거의 매회 등장합니다.
더 많은 정보를 확인하고 SQLD 핵심 개념을 학습해보세요.
자주 묻는 질문(FAQ)
GROUP BY 없이 COUNT를 사용할 수 있나요?
네 가능합니다. 전체 행 수를 계산할 때는 GROUP BY 없이 사용할 수 있습니다. 더 많은 정보를 확인하고 집계 함수 활용법을 알아보세요.
GROUP BY와 DISTINCT는 같은 건가요?
아닙니다. 결과가 비슷할 수는 있지만 목적과 동작 방식이 다릅니다. 더 많은 정보를 확인하고 SQL 차이점을 이해해보세요.
SQLD 시험에 GROUP BY 문제가 많이 나오나요?
네. SQLD 시험에서 가장 중요한 SQL 문법 중 하나입니다. 더 많은 정보를 확인하고 SQLD 기출문제를 분석해보세요.
마무리
SQL GROUP BY는 데이터를 그룹 단위로 분석하기 위한 핵심 SQL 문법입니다. COUNT, SUM, AVG와 함께 사용하면 데이터 분석 능력을 크게 향상시킬 수 있으며 SQLD 시험에서도 매우 높은 비중으로 출제됩니다. SQL GROUP BY 개념을 확실히 이해한 후 HAVING, ROLLUP, GROUPING SETS 같은 고급 집계 기능도 함께 학습해보시기 바랍니다. 더 많은 정보를 확인하고 다음 단계인 SQL HAVING 사용법도 함께 학습해보세요.
