55일차 (2) - SQL (그룹 함수, 윈도우 함수)

Yohan·2024년 5월 9일
0

코딩기록

목록 보기
78/156
post-custom-banner

그룹 함수

  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에 대한 합계인지 여부를 확인

시험에서 쉽게 문제를 풀 수 있는 방법

  1. 각 함수의 특징 이해 및 기억: ROLLUP은 계층적 집계, CUBE는 모든 조합의 집계, GROUPING SETS는 원하는 조합의 집계를 수행
  2. GROUPING 함수 사용법 기억: 집계된 열의 정보를 얻을 수 있다는 것을 기억
  3. 문제 접근 시 적절한 함수 선택: 요구되는 집계 유형에 따라 적절한 함수를 선택하고 적용
  4. 문제 해석 및 결과 도출 연습: 문제를 풀 때, 각 함수의 결과를 적절하게 해석하고 필요한 결과를 도출할 수 있도록 연습

윈도우 함수

SQL에서 분석 및 집계 작업을 수행할 때 사용되는 함수

윈도우 함수 종류

중요한 부분

  1. RANK(): 해당 행의 순위를 반환합니다. 동일한 값이 있는 경우 동일한 순위를 할당하며, 그 다음 순위는 건너뜁니다.
  2. DENSE_RANK(): 해당 행의 순위를 반환합니다. 동일한 값이 있는 경우 동일한 순위를 할당하며, 그 다음 순위를 건너뛰지 않습니다.
  3. 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

나머지

  1. LEAD(): 현재 행보다 지정된 수만큼 앞선 행의 값을 반환합니다.
  2. LAG(): 현재 행보다 지정된 수만큼 뒤에 있는 행의 값을 반환합니다.
  3. FIRST_VALUE(): 윈도우 내의 첫 번째 행의 값을 반환합니다.
  4. LAST_VALUE(): 윈도우 내의 마지막 행의 값을 반환합니다.
  5. SUM(), AVG(), MIN(), MAX() 등의 집계 함수도 윈도우 함수로 사용할 수 있습니다.

윈도우 함수와 같이 사용되는 절

  1. PARTITION BY: 결과 집합을 지정된 열을 기준으로 여러 그룹으로 나눔
    -> 그룹별로 분석 작업을 수행 가능
  2. ROWS: 윈도우 프레임을 구성하는 방법 중 하나로, 현재 행과 관련된 행 수를 기준으로 윈도우 프레임의 범위를 설정합니다. 예를 들어, ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING은 현재 행을 기준으로 이전 행과 다음 행을 포함하는 윈도우 프레임을 생성합니다.
  3. RANGE: 현재 행과 관련된 값 범위를 기준으로 윈도우 프레임의 범위를 설정합니다. RANGEORDER BY 절에 정의된 열의 값에 따라 윈도우 프레임의 범위를 설정합니다. 예를 들어, RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING은 현재 행을 기준으로 값이 1000 작거나 같은 행부터 값이 1000 크거나 같은 행까지 포함하는 윈도우 프레임을 생성합니다.
  4. PRECEDING: 윈도우 프레임 범위를 설정할 때 사용되는 키워드로, 현재 행보다 이전에 있는 행을 포함하도록 범위를 지정합니다. UNBOUNDED PRECEDING은 현재 행을 기준으로 윈도우 프레임의 시작을 결과 집합의 첫 행으로 설정합니다.
  5. FOLLOWING: 윈도우 프레임 범위를 설정할 때 사용되는 키워드로, 현재 행보다 다음에 있는 행을 포함하도록 범위를 지정합니다. UNBOUNDED FOLLOWING은 현재 행을 기준으로 윈도우 프레임의 끝을 결과 집합의 마지막 행으로 설정합니다.
profile
백엔드 개발자
post-custom-banner

0개의 댓글