BigQuery4. WHERE 절(NULL, AND, LIKE, IN), 집계( DISTINCT, COUNTIF, GROUP BY ALL)

이유민·2024년 11월 1일

BigQuery

목록 보기
5/15

1. WHERE절 옵션들

1.1. NULL

  • NULL은 0도 아니고, " "도 아니다.
  • NULL은 '알 수 없음'이다
  • NULL은 IS 연산자를 사용한다 => IS NULL, IS NOT NULL

SELECT
--COUNT(id) as pokemon_cnt
FROM dataset.pokemon
WHERE
--type2 IS NULL


1.2. AND, OR

  • WHERE 절에서 여러 조건을 연결하고 싶은 경우에 사용한다

  • AND 조건 : A AND B

  • OR 조건 : (A) OR (B)

    SELECT
    --type1,
    --COUNT(id) AS type1_cnt
    FROM dataset.pokemon
    WHERE
    --type2 is null
    --AND type1 = "Fire"

    SELECT
    --type1,
    --COUNT(id) AS type1_cnt
    FROM dataset.pokemon
    WHERE
    --(type2 is null)
    --OR (type1 = "Fire")


1.3. LIKE

  • WHERE 절에서 특정 단어가 포함된 row를 추출할 때 사용한다

  • 주로 문자열 컬럼에 많이 적용한다

    컬럼 LIKE "특정 단어%"

  • "%a" : a로 끝나는 단어, "a%" : a로 시작하는 단어, "%a%" : a가 들어간 단어

    SELECT
    --kor_name
    FROM dataset.pokemon
    WHERE
    --kor_name LIKE "%파%"


1.4. IN

  • WHERE 절에서 여러 조건을 묶어서 나열할 때 사용한다
  • OR의 성격을 띄고 있다

    SELECT
    --*
    FROM dataset.trainer
    WHERE
    --(name = "Iris)
    --OR (name = "Whitney")
    --OR (name = "Cynthia")

    =

    SELECT
    --*
    FROM dataset.trainer
    WHERE
    --name IN ("Iris", "Whitney", "Cynthia")


2. 집계 함수

2.1. DISTINCT

  • DISTINCT는 DAU (Daily Active User)를 보는 데 많이 사용한다
  • DAU : Active한 유저의 수를 하루 단위로 집계
    • 유저의 접속 기록, 이벤트 로그 등이 여러 row에 중복해서 있는 경우 :
      => DAU를 알고 싶다 => User 정보(id 등)를 Unique하게 봐야 한다 => DISTINCT 사용

      COUNT(DISTINCT user_id) AS dau


2.2. COUNTIF

  • 조건이 들어간 컬럼의 수를 집계할 때 사용한다

  • 연습문제
    트레이너 별로 풀어준 포켓몬의 비율이 20%가 넘는 포켓몬 트레이너는 누구인지 알 수 있는 쿼리를 작성하시오.
    풀어준 포켓몬의 비율=(풀어준 포켓몬 수/전체 포켓몬의 수)

    /테이블: trainer_pokemon, 조건: 풀어준 포켓몬의 비율이 20%가 넘어야 한다, 컬럼: trainer_id, 집계: COUNTIF/

    SELECT
    --trainer_id,
    --COUNTIF(status="Released") as released_cnt,
    --COUNT(pokemon_id) as pokemon_cnt,
    --COUNTIF(status="Released")/COUNT(pokemon_id) as released_ratio
    FROM basic.trainer_pokemon
    GROUP BY
    --trainer_id
    HAVING
    --released_ratio >= 0.2


2.3. GROUP BY ALL

profile
best.DA

0개의 댓글