그룹 함수
ROLLUP (학과, 지역)
GROUPING SETS (학과, (학과, 지역), ())
-> 학과별 통계, 학과+지역 통계, 전체 통계
CUBE (학과, 지역)
GROUPING SETS (학과, 지역, (학과, 지역), ())
-> 학과별 통계, 지역별 통계, 학과+지역 통계, 전체 통계
ROLLUP
- 계층적 집계를 수행하는 함수
- 여러 열을 기준으로 그룹화하고 부분 합계 및 총계를 계산
- 왼쪽에서 오른쪽으로 열을 그룹화하며 상위 레벨의 집계를 생성
- ROLLUP (A, B) - A로만 통계 1번, A+B로 통계 1번, 전체 통계 1번
- 순서가 중요, ROLLUP (학과, 지역)와 ROLLUP (지역, 학과)는 다름
- ROLLUP(A) -> A로만 통계, 전체통계
CUBE
- 모든 가능한 조합의 그룹화를 생성하여 다차원 집계를 수행
- 여러 차원 간의 합계를 계산할 수 있음
- CUBE (A, B) - A로만 통계 1번, B로만 통계 1번, A+B로 통계 1번, 전체 통계 1번
GROUPING SETS
- 사용자가 원하는 특정 그룹화 조합을 생성할 수 있는 함수
- 원하는 그룹화 집합을 명시적으로 지정할 수 있음
SELECT location, product, SUM(sales) as total_sales
FROM sales_data
GROUP BY GROUPING SETS((location, product), (location), (product), ());
- 위 처럼 코드를 짜게되면 CUBE와 같게 쿼리를 짤 수 있다.
-> location + product별 판매량 합계, location별 판매량 합계, product별 판매량 합계, 그리고 전체 판매량 합계를 반환
GROUPING
- ROLLUP, CUBE, GROUPING SETS와 함께 사용되어, 결과 집합에서 특정 열이 집계되었는지 여부를 확인하는 데 사용
- 해당 열이 집계되었으면 1, 그렇지 않으면 0을 반환
SELECT location, product, SUM(sales) as total_sales, GROUPING(location) as is_location_total, GROUPING(product) as is_product_total
FROM sales_data
GROUP BY ROLLUP(location, product);
- is_location_total 및 is_product_total 열을 사용하여 해당 행이 location 또는 product에 대한 합계인지 여부를 확인
시험에서 쉽게 문제를 풀 수 있는 방법
- 각 함수의 특징 이해 및 기억: ROLLUP은 계층적 집계, CUBE는 모든 조합의 집계, GROUPING SETS는 원하는 조합의 집계를 수행
- GROUPING 함수 사용법 기억: 집계된 열의 정보를 얻을 수 있다는 것을 기억
- 문제 접근 시 적절한 함수 선택: 요구되는 집계 유형에 따라 적절한 함수를 선택하고 적용
- 문제 해석 및 결과 도출 연습: 문제를 풀 때, 각 함수의 결과를 적절하게 해석하고 필요한 결과를 도출할 수 있도록 연습
윈도우 함수
SQL에서 분석 및 집계 작업을 수행할 때 사용되는 함수
윈도우 함수 종류
중요한 부분
- RANK(): 해당 행의 순위를 반환합니다. 동일한 값이 있는 경우 동일한 순위를 할당하며, 그 다음 순위는 건너뜁니다.
- DENSE_RANK(): 해당 행의 순위를 반환합니다. 동일한 값이 있는 경우 동일한 순위를 할당하며, 그 다음 순위를 건너뛰지 않습니다.
- ROW_NUMBER(): 해당 행의 고유한 순위를 반환합니다. 동일한 값이 있더라도 고유한 순위를 할당합니다.
- RANK : 1, 2, 2, 4, 4, 4, 4, 8
- DENSE_RANK : 1, 2, 2, 3, 3, 3, 3, 4
- ROW_NUMBER : 1, 2, 3, 4, 5, 6, 7, 8
나머지
- LEAD(): 현재 행보다 지정된 수만큼 앞선 행의 값을 반환합니다.
- LAG(): 현재 행보다 지정된 수만큼 뒤에 있는 행의 값을 반환합니다.
- FIRST_VALUE(): 윈도우 내의 첫 번째 행의 값을 반환합니다.
- LAST_VALUE(): 윈도우 내의 마지막 행의 값을 반환합니다.
- SUM(), AVG(), MIN(), MAX() 등의 집계 함수도 윈도우 함수로 사용할 수 있습니다.
윈도우 함수와 같이 사용되는 절
- PARTITION BY: 결과 집합을 지정된 열을 기준으로 여러 그룹으로 나눔
-> 그룹별로 분석 작업을 수행 가능
- ROWS: 윈도우 프레임을 구성하는 방법 중 하나로, 현재 행과 관련된 행 수를 기준으로 윈도우 프레임의 범위를 설정합니다. 예를 들어,
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
은 현재 행을 기준으로 이전 행과 다음 행을 포함하는 윈도우 프레임을 생성합니다.
- RANGE: 현재 행과 관련된 값 범위를 기준으로 윈도우 프레임의 범위를 설정합니다.
RANGE
는 ORDER BY
절에 정의된 열의 값에 따라 윈도우 프레임의 범위를 설정합니다. 예를 들어, RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
은 현재 행을 기준으로 값이 1000 작거나 같은 행부터 값이 1000 크거나 같은 행까지 포함하는 윈도우 프레임을 생성합니다.
- PRECEDING: 윈도우 프레임 범위를 설정할 때 사용되는 키워드로, 현재 행보다 이전에 있는 행을 포함하도록 범위를 지정합니다.
UNBOUNDED PRECEDING
은 현재 행을 기준으로 윈도우 프레임의 시작을 결과 집합의 첫 행으로 설정합니다.
- FOLLOWING: 윈도우 프레임 범위를 설정할 때 사용되는 키워드로, 현재 행보다 다음에 있는 행을 포함하도록 범위를 지정합니다.
UNBOUNDED FOLLOWING
은 현재 행을 기준으로 윈도우 프레임의 끝을 결과 집합의 마지막 행으로 설정합니다.