[DB] 그룹화 분석하기

artp·2025년 3월 28일
0

database

목록 보기
8/10
post-thumbnail

8. 그룹화 분석하기

8.1 그룹화란

8.1.1 그룹화의 개념

그룹화란 데이터 분석 기법의 하나로, 데이터를 특정 기준에 따라 여러 그룹으로 나누고 그룹별 데이터를 요약하거나 분석하는 것입니다.
이를 통해 복잡한 데이터 사이에서 유의미한 패턴을 찾거나, 특정 변수에 따른 행동이나 특성을 더 잘 이해할 수 있습니다.

그룹화 형식은 다음과 같습니다.

SELECT 그룹화_컬럼, 집계_함수(일반_컬럼)
FROM 테이블명
WHERE 조건
GROUP BY 그룹화_컬럼;

8.1.2 그룹화의 특징

GROUP BY 절은 다음 3가지 특징이 있습니다.

1. 집계 함수와 함께 사용해야 함

GROUP BY 절은 하나 이상의 집계 함수와 함께 사용해야 의미가 있습니다. 단순히 GROUP BY 절만 사용하면 데이터를 그룹으로 묶기만 합니다.
합계, 평균, 총 개수, 최댓값, 최솟값 등 유의미한 데이터 분석 결과를 얻으려면 그룹화한 후 반드시 후속 집계 작업을 해야 합니다.

2. 여러 컬럼으로 그룹화할 수 있음

GROUP BY 절로 데이터를 그룹화할 때 2개 이상의 컬럼을 기준으로 그룹화할 수 있습니다. 이 경우 각 컬럼 조합에 따라 고유한 그룹이 형성됩니다.

여러 컬럼으로 그룹화하는 형식은 다음과 같습니다.

SELECT 그룹화_컬럼1, 그룹화_컬럼2, 집계_함수(일반 컬럼)
FROM 테이블명
WHERE 조건
GROUP BY 그룹화_컬럼1, 그룹화_컬럼2;

3. SELECT 절에 올 수 있는 컬럼이 제한적임

그룹화한 쿼리의 SELECT 절에 올 수 있는 컬럼은 GROUP BY 절에서 지정한 그룹화 컬럼이거나, 집계 함수의 일부로 사용되는 컬럼이어야 합니다. 그렇지 않으면 에러가 발생합니다.

에러 예시

-- 잘못된 예시
SELECT gender, height
FROM students
GROUP BY gender;

-- 오류: height는 집계 함수나 GROUP BY에 포함되지 않음

8.2 그룹화 필터링, 정렬, 조회 개수 제한

8.2.1 그룹화 필터링

그룹화 필터링이란 그룹화한 결과에서 특정 조건을 만족하는 그룹의 데이터만 가져오는 것입니다. 예를 들어 성별로 그룹화한 후 평균 키가 170이 넘는 데이터만 가져온다거나 결제 유형별로 그룹화한 후 평균 결제 금액이 5만원이 넘는 데이터만 가져올 때 그룹화 필터링을 사용합니다.

그룹화 필터링은 GROUP BY 절에 HAVING 절을 추가해 수행합니다. HAVING 절은 GROUP BY 절로 나눈 그룹에 필터링 조건을 거는 역할을 합니다.

그룹화 필터링 형식은 다음과 같습니다.

SELECT 그룹화_컬럼, 집계_함수(일반_컬럼)
FROM 테이블명
WHERE 일반_필터링_조건
GROUP BY 그룹화_컬럼
HAVING 그룹_필터링_조건;

HAVING 절은 WHERE 절과 비슷하게 작동하는 듯 보이지만 실제로 차이가 있습니다.
WHERE 절은 개별 튜플에 대해 필터링을 수행하지만, HAVING 절은 그룹화한 결과, 즉 그룹 단위로 필터링을 수행합니다.

  • WHERE: 그룹화 이전에 개별 행(row)을 필터링
  • HAVING: 그룹화 이후에 그룹 결과에 대해 필터링

8.2.2 정렬

정렬(sort)이란 쿼리 결과의 데이터를 오름차순 또는 내림차순으로 배열하는 것입니다.
SQL에서 특정 컬럼을 중심으로 정렬할 때는 ORDER BY 절을 사용합니다. 다음 형식에서 정렬_컬럼은 정렬의 기준이 되는 컬럼을 의미하고, ASC는 오름차순(기본값), DESC는 내림차순을 의미합니다. 정렬 컬럼은 여러 개를 쓸 수 있습니다.

정렬 형식은 다음과 같습니다.

SELECT *
FROM 테이블명
WHERE 조건
ORDER BY 정렬_컬럼1 [ASC | DESC], 정렬_컬럼2 [ASC | DESC], ...;

예시

-- 평균 점수가 높은 순으로 상위 5개 과목 조회
SELECT subject, AVG(score) AS avg_score
FROM scores
GROUP BY subject
ORDER BY avg_score DESC
LIMIT 5;

8.2.3 조회 개수 제한

조회 개수 제한은 상위 N개의 튜플을 조회할 때 사용하는 명령입니다. LIMIT 절을 이용해 반환하려는 튜플의 개수 N을 정의합니다.

조회 개수 제한 형식은 다음과 같습니다.

SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
LIMIT N;

만약 상위 N개 튜플이 아닌 중간 튜플을 가져오고 싶다면 LIMIT 절에 OFFSET 키워드를 추가해 읽어 올 데이터의 시작 지점을 조정할 수 있습니다.

SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
LIMIT N OFFSET M;
  • N: 가져올 튜플의 개수
  • M: 건너뛸 튜플의 개수

8.3 마무리

8.3.1 그룹화

데이터 분석 기법의 하나로, 데이터를 특정 기준에 따라 여러 그룹으로 나누고 그룹별 데이터를 요약하거나 분석하는 것입니다. 복잡한 데이터 사이에서 유의미한 패턴을 찾거나 특정 변수에 따른 행동이나 특성을 더 잘 이해하기 위해 수행합니다. 그룹화할 때는 GROUP BY 절을 사용합니다.

SELECT 그룹화_컬럼, 집계_함수(일반_컬럼)
FROM 테이블명
WHERE 조건
GROUP BY 그룹화_컬럼

8.3.2 그룹화 필터링

그룹화한 결과 테이블에서 특정 조건을 만족하는 그룹의 데이터만 가져오는 것으로, GROUP BY 절로 그룹화한 대상에 HAVING 절을 추가해 수행합니다.

SELECT 그룹화_컬럼, 집계_함수(일반_컬럼)
FROM 테이블명
WHERE 일반_필터링_조건
GROUP BY 그룹화_컬럼
HAVING 그룹_필터링_조건;

8.3.3 정렬

쿼리 결과의 데이터를 오름차순 또는 내림차순으로 배열하는 것으로, ORDER BY 절을 이용해 수행합니다.
다음 형식에서 정렬_컬럼은 정렬의 기준이 되는 컬럼을 의미하고, ASC는 오름차순(기본값), DESC는 내림차순을 의미합니다. 정렬 컬럼은 여러 개를 쓸 수 있습니다.

SELECT *
FROM 테이블명
WHERE 조건
ORDER BY 정렬_컬럼1 [ASC | DESC], 정렬_컬럼2 [ASC | DESC], ...;

8.3.4 조회 개수 제한

상위 N개의 튜플을 조회할 때 사용하는 명령입니다. LIMIT 절에 반환하려는 튜플의 개수 N을 넣어 조회합니다.

SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
LIMIT N;

맨 위부터가 아니라 중간 튜플부터 조회하고 싶다면 OFFSET 키워드를 추가해 건너뛸 튜플의 개수를 지정합니다.

SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
LIMIT N OFFSET M;
  • N: 가져올 튜플의 개수
  • M: 건너뛸 튜플의 개수
profile
donggyun_ee

0개의 댓글