데이터를 활용하는 과정에 있어 데이터를 탐색하는 과정에서도 "요약" 과정에
해당하는 집계 관련된 부분을 배우는 시간 [group by, having, sum/count 이해하기]

데이터를 활용하는 과정을 설명해주는 것이 공감되었는 데,
무엇이든 "어떤 일을 해야 한다" > "원하는 것을 정한다" so what & why so 를 묻고 답하는 과정은 필수인 듯 하다.
요약하는 과정에서 집계라는 과정이 필요하고
모아서(그룹화) 계산하는 것이 집계로 생각하면 된다.
✏️ 여기서 핵심은 그룹화! ➡️ Group by 로 같은 값끼리 모아서 그룹화하여 집계하는 것이 핵심
✅ 계산은 더하기, 빼기, 최대값, 최소값, 평균, 갯수 세기가 있다.
특정 컬럼을 기준으로 모으면서 다른 컬럼에서는 집계 가능하다.
ex. 고객별 ID 값에서 같은 주문인 경우 주문금액을 합계 내리는 방식 = 인당 총 주문금액 확인 가능
여기서 추출을 할 때 "정렬(order by)"를 이용해 총 주문 금액이 큰 것부터 나열할 수 있음
> 이런 경우, 충성고객 등을 정의할 때 유용하게 활용할 수 있을 것으로 예상됨
이때 포인트는 어떤 것을 "조건"으로 설정할 지가 중요하다. (문제 파악 후 그룹핑하는 것이 핵심)
SELECT
집계할_컬럼1
집계 함수(count, max, min 등)
FROM Table
GROUP BY
집계할_컬럼1
✏️ 집계할 컬럼을 SELECT 에 명시하고 그 컬럼을 꼭 GROUP BY에 작성해야 한다. (*명시하기 위함)
bigquery 안내 문서를 참고하면 집계 함수의 리스트를 확인할 수 있으니 체크해보기
➡️ 필요할 때 서칭 & 공식 문서를 잘 활용하는 것도 이후 독학할 때 중요 키 포인트일 것 같다.
Distinct : 고유값을 알고 싶은 경우
별개의 여러 값 중에 Unique 한 것만 보고 싶은 경우 사용하며 중복을 제거한 것이다.
예를 들어 기간 내의 총 주문 고객 수를 알고 싶을 때 distinct 를 활용하면 된다.
보통 count와 쓰는 경우가 많다고 한다!
ex. 메인 페이지 view 수 vs 메인 페이지 view한 유저수 => 다를 것 / 보조 지표로 함께 활용하는 편이 좋다.
➡️ count(user_id) vs count(DISTINCT user_id) 값이 다름을 보조적으로 확인하기!
SELECT
집계할 컬럼,
COUNT(DISTINCT count할 컬럼)
FROM table
GROUP BY
집계할 컬럼
집계 연습 문제
--1. pokemon 테이블에 있는 포켓몬 수를 구하는 쿼리 작성해주세요
--사용할 테이블 : pokemon
--조건 : x
--집계할 때 사용할 컬럼 : x
--집계할 때 사용할 계산 : 수를 구한다 => count, 포켓몬
SELECT
COUNT(id) as cnt
FROM basic.pokemon
--2. 포켓몬의 수가 세대별로 얼마나 있는 지 알 수 있는 쿼리를 작성해주세요
--사용할 테이블 : pokemon
--조건 : x
--그룹화 할 때 사용할 컬럼 : generation
--집계할 때 사용할 계산 : count
SELECT
generation,
COUNT(id) AS cnt
FROM basic.pokemon
GROUP BY
generation
TIP 그룹화(집계) 활용 포인트
데이터 분석하다 그룹화가 필요한 경우,
일자별 집계(원본 데이터의 경우 특정 시간에 어떤 유저가 한 행동이 기록, 일자별로 집계할 경우)
연령대별 집계(특정 연령대에서 더 많이 구매했는가?)
특정 타입별 집계(특정 제품 타입을 많이 구매했는가?)
앱 화면별 집계(어떤 화면에 유저가 많이 접근했는가?)
✏️ 결국 여기서도 "질문"을 잘 던지는 것이 분석 및 추출하는 데 도움을 준다는 점을 알 수 있었다.
조건을 설정하고 싶은 경우 : WHERE
table에서 바로 조건을 설정하고 싶은 경우

조건을 설정하고 싶은 경우: HAVING
테이블에 없던 컬럼을 생성 후 해당 컬럼을 조건으로 활용하는 경우

✏️ having의 경우, 새롭게 생긴 컬럼에 조건을 준다고 생각하면 된다.
쿼리 내에 다른 쿼리가 들어갈 경우, having 써서 간결하게 만들 수 있다.
WHERE 은 원본 데이터 / HAVING + GROUP BY와 함께 활용한 조건으로 이해하면 편하다


서브쿼리
- SELECT 문에 존재하는 SELECT 쿼리
- FROM 절에 또 다른 SELECT 문을 넣어 테이블 처럼 활용하는 방법
- 괄호로 묶어서 사용
서브쿼리를 작성하고 서브 쿼리 바깥에서 WHERE 조건 설정하는 것 = 서브 쿼리에서 HAVING 으로 하는 것
정렬하기 : ORDEY BY
SELECT
col
FROM
ORDER BY <컬럼> <순서>
순서 : DESC(내림차순), OSC(오름차순 - 보통 default 로 설정되어 있다)
ORDER BY 는 쿼리의 맨 마지막(아래)에 두고, 쿼리의 맨 마지막에만 작성하면 된다
✏️ 중간에 필요없고 중간에 작성 시 불필요한 로직이 발생될 수 있으니 마지막에 써주기
출력 개수 제한하기 : LIMIT
쿼리문의 결과 ROW 를 제한하고 싶은 경우 LIMIT 사용
✏️ 쿼리문의 제일 마지막에 작성해야 한다.
모든 결과와 조건이 반영된 후의 결과 값에서 제한해서 추출하는 것이기 때문! (*ORDER BY 함께 쓸 경우 그 다음으로 써주면 된다)
GROUP BY 연습 문제
--3. 포켓몬의 수를 타입별로 집계하고 포켓몬 수가 10이상인 타입만 남기는 쿼리를 작성해주세요. 포켓몬 수 많은 순 정렬
--테이블 : pokemon
--조건(where) 테이블 원본 -> 없음
--집계 후 조건(having) -> 10이상
--정렬 -> 포켓몬 수가 많은 순 정렬(order by 포켓몬 수 desc)
-- having 하기 전 단계적으로 실행해보며 가도 된다!
SELECT
type1,
COUNT(id) as cnt
FROM basic.pokemon
GROUP BY
type1
HAVING cnt >= 10
ORDER BY cnt DESC
✅ SQL이 처리되는 로직 / 문제에 따라서 단계별로 조건과 추출 데이터에 대한 정보 흐름을 적어주면
사고의 흐름과 추출 과정을 볼 수 있어서 좋은 것 같다.
✏️ 이번 강의와 학습을 통해 느낀점
✅ 집계함수를 이해하고 내가 원하는 데이터 추출하는 과정을 데이터 선택 > 조건 선택 > 보고자 하는 데이터 정렬 기준 편하게 보기 순서로 확인해보는 연습이 중요한 것 같다.
💪🏻 Next to do
☑️ 고객 데이터 기반 집계를 통해 고객 LTV 관련 데이터 확인하는 쿼리 작성해보기
☑️ 집계를 통해 간단 추출하기 & 연습 문제를 통해 select절 익숙해지기
'Google BigQuery' 카테고리의 다른 글
| [강의 수강 6일차] SELECT절 연습 문제 풀어보기 (3) (0) | 2025.05.21 |
|---|---|
| [강의 수강 5일차] SELECT절 연습 문제 풀어보기 (2) (0) | 2025.05.18 |
| [강의 수강 4일차] SELECT절 연습 문제 풀어보기 (1) (0) | 2025.05.14 |
| [강의 수강 2일차] select 절 이해하기 (0) | 2025.05.05 |
| [강의 수강 1일차] 인프런 초보자를 위한 구글 BigQuery 입문하기 (0) | 2025.05.04 |