1. 그룹화란?
그룹화란 데이터 분석 기법의 하나로, 데이터를 특정 기준에 따라 여러 그룹으로 나누고 그룹별 데이터를 요약하거나 분석하는 것이다.
복잡한 데이터 사이에서 유의미한 패턴을 찾거나 특정 변수에 따른 행동이나 특성을 이해하기 위해 수행한다.
사용방법:
SELECT 그룹화_칼럼, 집계_함수(일반_칼럼)
FROM 테이블명
WHERE 조건 -- 필터링 조건이 없으면 생략 가능
GROUP BY 그룹화_칼럼;
위 쿼리는 데이터를 '그룹화_칼럼'에 따라 분류하고, 각 그룹에 대해 집계 함수를 적용하여 결과를 반환한다.
1.1. 그룹화의 특징
1) 집계 함수와 함께 사용해야 한다.
단순히 그룹화만 사용하면 데이터를 묶기만 할 뿐 아무 의미가 없다.
유의미한 데이터 분석 결과를 얻으려면 반드시 후속 집계 작업을 해야한다.
대표적인 집계 함수로는 COUNT(), SUM(), AVG(), MAX(), MIN() 등이 있다.
2) 여러 칼럼으로 그룹화할 수 있다.
데이터를 그룹화할 때 2개 이상의 칼럼을 기준으로 그룹화할 수 있다.
이를 통해 더 세분화된 분석이 가능하다.
SELECT 부서, 직급, COUNT(*) as 직원수
FROM 직원
GROUP BY 부서, 직급;
3) SELECT절에 올 수 있는 칼럼이 제한적이다.
그룹화한 쿼리의 SELECT절에 올 수 있는 칼럼은 GROUP BY 절에서 지정한 그룹화 칼럼이나 집계함수의 일부로 사용되는 칼럼이어야 한다.
이는 각 그룹에 여러 값이 존재할 수 있기 때문에, 어떤 값을 표시해야 할지 모호함을 방지하기 위함이다.
1.2. 그룹화 필터링(HAVING)
그룹화 필터링이란 그룹화한 결과에서 특정 조건을 만족하는 그룹의 데이터만 가져오는 것이다.
GROUP BY 절과 함께 HAVING 절을 사용하여 필터링 조건을 지정할 수 있다.
사용방법:
SELECT 그룹화_칼럼, 집계_함수(일반_칼럼)
FROM 테이블명
WHERE 일반_필터링_조건
GROUP BY 그룹화_칼럼
HAVING 그룹_필터링_조건;
* WHERE절과의 차이점
WHERE절과 HAVING절은 모두 필터링을 위한 조건문이지만, 적용 시점과 대상이 다르다.
- WHERE : 개별 튜플(행)에 대해 필터링을 수행. 그룹화 이전에 적용
- HAVING : 그룹화한 결과에 대해 그룹 단위로 필터링을 수행. 그룹화 이후에 적용
ex)
-- 부서별 평균 급여가 3000 이상인 부서만 조회
SELECT 부서, AVG(급여) as 평균급여
FROM 직원
GROUP BY 부서
HAVING AVG(급여) >= 3000;
2. 정렬(ORDER BY)
정렬이란 쿼리 결과를 오름차순 혹은 내림차순으로 배열하는 것이다.
ORDER BY 절을 사용해 정렬할 수 있으며, ASC는 오름차순(기본값), DESC는 내림차순을 의미한다.
사용방법:
SELECT *
FROM 테이블명
WHERE 조건
ORDER BY 정렬_칼럼1 [ASC | DESC], 정렬_칼럼2 [ASC | DESC], ...;
ORDER BY 절은 쿼리의 마지막 부분에 위치하며, 여러 칼럼을 기준으로 정렬할 수 있다.
첫 번째 칼럼을 기준으로 정렬한 후, 동일한 값이 있는 경우 두 번째 칼럼을 기준으로 정렬한다.
ex)
-- 부서별 오름차순 정렬 후, 같은 부서 내에서는 급여 내림차순 정렬
SELECT 이름, 부서, 급여
FROM 직원
ORDER BY 부서 ASC, 급여 DESC;
3. 조회 개수 제한(LIMIT)
조회 개수 제한은 상위 N개의 튜플을 조회할 때 사용하는 명령이다.
LIMIT 절을 이용해 반환하려는 튜플의 개수 N을 정의할 수 있다.
사용방법:
SELECT 칼럼1, 칼럼2, ...
FROM 테이블명
LIMIT N;
3.1. OFFSET
상위가 아닌 중간 튜플을 가져오고 싶다면 OFFSET 키워드를 추가해 읽어올 데이터의 시작 지점을 조정할 수 있다.
SELECT 칼럼1, 칼럼2, ...
FROM 테이블명
LIMIT N OFFSET M; -- N: 가져올 튜플의 수, M: 건너뛸 튜플의 수
OFFSET M은 처음부터 M개의 행을 건너뛰고, 그 다음부터 N개의 행을 가져온다.
이는 페이지네이션(pagination)을 구현할 때 특히 유용하다.
ex)
-- 급여가 높은 상위 5명의 직원 조회
SELECT 이름, 급여
FROM 직원
ORDER BY 급여 DESC
LIMIT 5;
-- 급여 순위 6위부터 10위까지의 직원 조회
SELECT 이름, 급여
FROM 직원
ORDER BY 급여 DESC
LIMIT 5 OFFSET 5;
'학습 > DB' 카테고리의 다른 글
10. 데이터 모델링 (0) | 2025.03.17 |
---|---|
9. 서브쿼리 (0) | 2025.03.14 |
7. 조인(JOIN) (0) | 2025.03.01 |
6. 관계와 제약조건 (0) | 2025.02.26 |
5. 자료형과 필터링 (1) | 2025.02.23 |