BigQuery3. 집계(GROUP BY, HAVING, 서브쿼리, ORDER BY, LIMIT)

이유민·2024년 11월 1일

BigQuery

목록 보기
4/15

**** 정리 ****

  • 집계하고 싶은 경우 : GROUP BY + 집계 함수 (COUNT, AVG, MAX 등)
  • 고유값을 알고 싶은 경우 : DISTINCT(컬럼)
  • 조건을 설정하고 싶은 경우 : WHERE / HAVING
  • 정렬하고 싶은 경우 : ORDER BY 컬럼 DESC
  • 출력 개수를 제한하고 싶은 경우 : LIMIT 10

1. 집계

  • 집계하다
    : 모아서 계산하다 = 그룹화해서 계산하다

1.1. GROUP BY

  • GROUP BY : 같은 값끼리 모아서 그룹화한다

  • 특정 컬럼을 기준으로 그룹화하여 집계(합, 평균, MAX, MIN 등)

    • 예시) 색상 컬럼을 기준으로 그룹화하여 집계(SUM)

  • 집계할 컬럼을 GROUP BY에 작성하고 그 컬럼을 SELECT에 명시

    SELECT
    --집계할컬럼1,
    --집계 함수(COUNT, MAX, MIN 등)
    FROM Table
    GROUP BY
    --집계할
    컬럼1

1.2. 집계 함수

  • AVG

  • MAX

  • MIN

  • SUM

  • COUNT

  • COUNTIF : 조건이 있는 컬럼의 수를 알고 싶은 경우

    COUNTIF(컬럼 = 3)

  • DISTINCT : 중복을 제거하고 Unique한 값만 보고 싶을 때 사용

    • COUNT(DISTINCT 컬럼) 으로 자주 사용

      SELECT
      --집계할 컬럼,
      --COUNT(DISTINCT 컬럼)
      FROM Table
      GROUP BY
      --집계할 컬럼

    • 예시) 전체 View 수랑 User 수를 비교할 때

      COUNT(user_id) => 전체 view 수
      COUNT(DISTINCT user_id) => 중복없는 view 수 => user 수

1.3. 어떤 경우에 그룹화(집계)를 할까?

  • 일자별 집계
    : 특정 시간에 어떤 유저가 한 행동이 기록된 데이터->일자별, 시간대별로 집계

  • 연령대별 집계
    : 특정 연령대에서 더 많이 구매했는가?

  • 특정 타입별 집계
    : 특정 제품 타입을 더 많이 구매했는가?

  • 앱 화면별 집계
    : 어떤 화면에 유저가 많이 접근했는가?

  • 조합: 일자별 + 제품 타입별 판매량(count), 매출(sum)


2. 조건문

2.1. WHERE

: Table에 있는 컬럼에 바로 조건을 설정하고 싶은 경우

2.2. HAVING

: GROUP BY를 통해 생성된 컬럼에 조건을 설정하고 싶은 경우

SELECT
--컬럼1, 컬럼2,
--COUNT(컬럼1) AS col1_cnt
FROM Table
WHERE
--컬럼1 >= 3
GROUP BY 컬럼1, 컬럼2
HAVING
--col1_cnt >= 3

2.3. 서브 쿼리

: SELECT문 안에 존재하는 SELECT 쿼리

    서브 쿼리 작성하고, 서브쿼리 바깥에서 WHERE 조건 설정 = 서브 쿼리에서 HAVING으로 조건 설정
     -> 서브 쿼리가 하나의 table로 작용하기 때문

SELECT
--*
FROM (
--SELECT
----컬럼1,
----COUNT(컬럼1) AS col1_cnt
--FROM Table
--GROUP BY 컬럼1
)
WHERE
--col1_cnt >= 3

SELECT
--*
FROM (
--SELECT
----컬럼1,
----COUNT(컬럼1) AS col1_cnt
--FROM Table
--GROUP BY 컬럼1
--HAVING
----col1_cnt >= 3
)


4. ORDER BY

: 정렬하기. 쿼리의 맨 마지막에 작성.

  • ORDER BY => 모든 ROW에서 확인해서 재정렬 => 연산이 많이 소요 => 시간이 오래 걸린다
    => SELECT 제일 바깥에서 1번만 작성하면 된다

  • DESC : 내림차순

  • ASC : 오름차순 (Default)

    SELECT
    --컬럼
    FROM Table
    ORDER BY 컬럼 DESC


5. LIMIT

: 퀄리문의 출력 row 개수를 제한할 때 사용. ORDER BY보다 더 마지막에 작성.

SELECT
--컬럼
FROM Table
LIMIT 10


연습문제

1. 포켓몬의 수를 타입 별로 집계하고, 포켓몬의 수가 10 이상인 타입만 남기는 쿼리를 작성해주세요. 포켓몬의 수가 많은 순으로 정렬해주세요.
테이블: pokemon, 컬럼:  , 조건: 없음, 집계 후 조건: 포켓몬 수 10 이상, 그룹화 컬럼: type1, 집계 함수: count, 정렬: order by 포켓몬 수 desc

SELECT
  type1, 
  COUNT(id) as cnt
FROM basic.pokemon
GROUP BY 
  type1
HAVING 
  cnt >= 10
ORDER BY cnt desc
profile
best.DA

0개의 댓글