Data Science

데이터베이스 개론 몇 주차였더라...?

bibidibabidiboop 2025. 12. 2. 07:47

GROUP BY = 데이터의 전체적인 요약을 보기 위한 절.
한 테이블에서 같은 데이터끼리 묶어주는 역할을 한다.
이 GROUP BY는 크게 집계함수와 소계(총계)함수로 나눌 수 있다.
집=계함수(COUNT,SUM): "그룹별로" 요약정보를 계산한다.
EX) COUNT(*)를 사용하면 '서울'그룹 50명, '부산' 그룹 30명...과 같은 결과를 보여준다. 
그러나 이 GROUP BY의 아쉬운 점은 요약한 정보만 보여주고 총계를 보여주지 않기 때문에 
총계를 보기 위해서는 쿼리를 또 실행해야 한다.
EX) 아래는 그 예시이다.
SELECT 학년, COUNT(*)
FROM STUDENT
GROUP BY 학년;
=> 학년별 인원은 나오지만, 학교 전체 총 학생 수는 나오지 않는다.
이를 해결해주는 함수가 ROLLUP!!!!!!!!!!!!!!!!!
ROLLUP : 소계+총계까지 한 번에 계산해주는 똑똑한 GROUP BY 확장 기능
ROLLUP(A) : A로 그룹핑 + 총합계
ROLLUP(A,B) : A,B로 그룹핑 + A로 그룹핑 + 총합계
ROLLUP(A,B,C): A,B,C로 그룹핑 + A,B로 그룹핑 + A로 그룹핑 + 총합계
ROLLUP 핵심 = 계층구조, 즉 순서가 가장 중요
괄호에서 먼저 오는 요소가 상위이다.
동작 방식
1. 가장 세부적인 레벨(모든 요소 고려)
2. 그 다음 레벨
3. 최상위 레벨=총계를 집계
EX) 예제: GROUP BY ROLLUP(학년, 반)
결과:
1. (1학년,1반)30명, (1학년,2반)32명,......[반별 집계]
2. (1학년, NULL)120명, (2학년,NULL)11명...[학년별 집계]
3. (NULL, NULL)600명 ....[전체 총계]
ROLLUP의 괄호 역할은 여러 칼럼을 하나의 레벨로 묶는다는 것이다. 만일 ROLLUP((A,B),C)라는 문장이 있다면 이는 A와B 칼럼을 하나로 묶어 같은 레벨로 취급한다는 뜻이다. 즉, A혹은B 각각만의 소계는 생성이 되지 않는다는 의미이다.

큐브 예제
스타벅스 예제1
: CUBE(ORDER_DT,ODER_ITEM)
오더디티 오더아이텀 수량
오더디티 오더아이템 수량
오더디티 널 수량
오더디티 오더아이템 수량
오더디티 오더아이템 수량
오더디티 널 수량
널 오더아이템 수량
널 오더아이템 수량
널 널 수량

CUBE도 ROLLUP처럼 인수가 괄호로 묶인 상태일 때는 그 안에 있는 인수들의 조합까지는 안 내놓는다.

예시: CUBE((A,B),C)
생성그룹
: (A,B,C)
(A,B)
(C)
()


ROLLUP & CUBE의 아쉬움
롤업: 정해진 계층 때문에 ROLLUP(A,B)에서 B별 소계를 주지 않음
큐브: 불필요한 조합까지 항상 포함하여 너무 많은 조합을 생성함

-> 원하는 것만 골라 담는 요구를 완벽히 충족하기 어려움
SOLUTION: GROUPING SETS

GROUPING SETS
: 개발자가 필요한 그룹 조합만 '장바구니'에 담듯이 명시적으로 지정하는 함수. 롤업이나 큐브처럼 정해진 규칙을 따르지 않음

쿼리 사용법(총계X)
GROUP BY GROUPING SETS(ORDER_DT,ORDER_ITEM)
1. 날짜별 그룹리스트
2. 음료별 그룹리스트
결과: (날짜,음료가 조합된 그룹은 생성X),오직 날짜별 요약과 음료별 요약만 UNION처럼 보여줌

총계 추가하기
1. () 추가하기
2. 롤업 활용. 롤업은 항상 총계를 내놓으니까


!! GROUPING SETS 안에 롤업이나 큐브가 생성하는 그룹 목록 전체를 담을 수 있음


롤업의 결과로 나오는 NULL들이 진짜 없는 값인지, 소계/총계를 내기 위해 시스템이 만든 가짜 널값인지 구별할 방법이 없다...

=> 그룹핑!! GROUPING()
: SELECT 절에서 사용!!!!!!!!!!!
해당 널값이 진짜인지 가짜인지 판별해 주는 탐정 함수

작동 원리(0 또는 1): 
GROUPING(A)=O : A값은 진짜 데이터
GROUPING(A)=1 : A 컬럼에 보이는 NULL값은 소계/총계를 위한 가짜 널값

GROUP BY의 한계
그룹바이는 여러 행을 그룹 단위로 묶어 요약하는 기능이다.
즉, 100개의 원본 행을 10개의 그룹 결과로 압축한다
그 과정에서 개별 행의 세부 정보는 결과에 포함되지 않는다.

윈도우 함수의 중요성
- 윈도우 함수는 그룹바이와 달리 원본 행을 그대로 유지한다
- 행을 압축하지 않고, 각 행에 순위.누적합 비율 등 분석값을 덧붙임
- 데이터를 요약하는 것을 넘어, 각 행의 맥락과 흐름까지 분석할 수 있는 현대 데이터 분석의 핵심 도구