[BigQuery] 5. 데이터 그룹화하기

김주아·2024년 8월 4일
0

BigQuery

목록 보기
10/10

1. 데이터 그룹화하기

  • GROUP BY
    • GROUP BY[컬럼 이름] 형식으로 사용

    • 주로 그룹별 데이터를 집계할 때 사용하며, 엑셀 피벗 기능과 유사

    • GROUP BY가 쓰인 쿼리의 SELECT 절에는 GROUP BY 대상 컬럼과 그룹함수만 사용가능

      • 만약 GROUP BY 대상 컬럼이 아닌 컬럼을 SELECT하면 에러 발생
    • 여러 컬럼으로 그룹화도 가능 → 키워드 뒤에 [컬럼이름]을 복수개 입력하면 됨

    • 컬럼 번호로도 그룹화 가능
      - 이때, 컬럼번호는 SELECT절의 컬럼 이름 순서를 의미함

      --ver1.
      SELECT type
      FROM BigQuery.mypokemon
      GROUP BY type;
      
      --ver2.
      -- AVG: 그룹함수 - 사용가능
      SELECT type, AVG(attack)
      FROM BigQuery.mypokemon
      GROUP BY type;

2. 그룹에 조건주기

  • HAVING: 가져올 데이터 그룹에 조건을 지정해주는 키워드
    • HAVING 조건식 형식으로 사용
    • 조건식이 TRUE(참)이 되는 그룹만 선택
    • HAVING 절의 조건식에는 그룹함수를 사용

참고) SQL에서 "HAVING 절"과 "WHERE 절"의 차이점

  1. WHERE 절:
    • WHERE 절은 그룹화 되기 전의 개별 행에 조건을 적용합니다.
    • 이는 주로 SELECT 문에서 데이터를 그룹화하기 전에 특정 조건을 충족하는 행만을 필터링하는 데 사용됩니다.
      • 예를 들어, 특정 조건을 만족하는 행만을 선택하여 결과 집합에 포함시키고자 할 때 WHERE 절을 사용합니다.
  2. HAVING 절:
    • HAVING 절은 그룹화 된 후의 데이터 집합에 조건을 적용합니다.
    • 이는 GROUP BY 절과 함께 사용되며, 그룹화된 결과에 대해 특정 조건을 충족하는 그룹만을 선택하는 데 사용됩니다.
      • 예를 들어, 특정 그룹의 집계 결과(예: 평균, 합계 등)가 특정 조건을 만족할 때만 그 그룹을 결과 집합에 포함시키고자 할 때 HAVING 절을 사용합니다.

간단히 말해, WHERE 절은 데이터를 그룹화하기 전에 행 수준에서 필터링하는 반면, HAVING 절은 그룹화한 후 그룹 수준에서 필터링합니다.

    -- 쿼리문법
    SELECT [컬럼 이름],.., [그룹 함수]
    FROM [테이블 이름]
    WHERE 조건식
    GROUP BY [컬럼 이름]
    HAVING 조건식;

3. 그룹함수

  • COUNT: 그룹의 값을 세는 함수

    • COUNT([컬럼 이름]) 형식으로 SELECT, HAVING절에 사용
      • 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같아도 되고, 같지 않아도 됨
      • COUNT(1)은 하나의 값을 1로 세어주는 표현으로, COUNT 함수에 자주 사용
    • GROUP BY가 없는 쿼리에도 사용가능 (*이때는 전체 로우에 함수가 적용)
  • SUM: 그룹의 합을 계산하는 함수

    • SUM([컬럼 이름]) 형식으로 SELECT, HAVING 절에서 사용
      • 집계할 컬럼이름은 그룹의 기준이 되는 컬럼과 같아도 되고, 같지않아도 됨
    • GROUP BY가 없는 쿼리에도 사용가능 (*이때는 전체 로우에 함수가 적용)
  • AVG: 그룹의 평균을 계산하는 함수

    • AVG([컬럼 이름]) 형식으로 SELECT, HAVING 절에서 사용
    • 집계할 컬럼이름은 그룹의 기준이 되는 컬럼과 같아도 되고, 같지않아도 됨
    • GROUP BY가 없는 쿼리에도 사용가능 (*이때는 전체 로우에 함수가 적용)
  • MIN: 그룹의 최솟값을 반환하는 함수

  • MAX: 그룹의 최댓값을 반환하는 함수

  • 예제

    1. SELECT 절에 사용

      SELECT type, COUNT(*), COUNT(1), AVG(attack), MAX(attack)
      FROM BigQuery.mypokemon
      GROUP BY type;
      • COUNT(*), COUNT(1)의 차이점?
        • 둘은 같은 결과를 반환함 (*실제 두 표현 사이의 큰 차이가 없음)
          • count(1): 값을 1로 치환해서 값을 세어줌
          • count(*): 각각의 로우를 하나의 객체로 생각해서 세어줌
            • COUNT(*)는 테이블의 모든 열을 고려, COUNT(1)은 단순히 행 수만을 계산
    2. HAVING 절에 사용

      SELECT type, COUNT(1), AVG(attack), MAX(attack)
      FROM BigQuery.mypokemon
      GROUP BY type
      HAVING COUNT(1)=2;

Tip! 쿼리 실행 순서 알아보기

  • 6가지 핵심 키워드
    • 해당 키워드는 작성 순서 및 실행 순서가 정해져 있음
      키워드문법작성순서실행순서
      SELECTSELECT [컬럼이름]15
      FROMFROM [테이블이름]21
      WHEREWHERE [조건식]32
      GROUP BYGROUP BY [컬럼이름]43
      HAVINGHAVING [조건식]54
      ORDER BYORDER BY [컬럼이름]66
profile
정확한 분석과 설득력 있는 시각화를 통해 데이터의 가치를 극대화합니다.

0개의 댓글