ARRAY, STRUCT, UNNEST, PIVOT

문제 1

array_exercises 테이블에서 각 영화(title)별로 장르(genres)를 UNNEST해서 보여주세요

답:

# 문제 : array_exercises 테이블에서 각 영화(title)별로 장르(genres)를 UNNEST해서 보여주세요
# 쿼리를 작성하는 목표, 확인할 지표 : 영화 별/ 장르를 unnest
# 쿼리 계산 방법 : 
# 데이터의 기간 : 
# 사용할 테이블 : array_exercises
# Join KEY : 
# 데이터 특징 : 
# 작성 흐름 : FROM - JOIN - WHERE - GROUP BY - HAVING - SELECT- ORDER BY - LIMIT 

SELECT
  title,
  un_genres
FROM advanced.array_exercises
CROSS JOIN UNNEST(genres) AS un_genres

문제 2

array_exercises 테이블에서 각 영화(title)별로 배우(actor)와 배역(character)을 보여주세요. 배우와 배역은 별도의 컬럼으로 나와야 합니다

배열 / 구조체 배열 : 푸는거고, 구조체는 값에 접근하는 것

답:

# 문제 : array_exercises 테이블에서 각 영화(title)별로 배우(actor)와 배역(character)을 보여주세요. 배우와 배역은 별도의 컬럼으로 나와야 합니다
-- 배열 / 구조체
-- 배열 : 푸는거고, 구조체는 값에 접근하는 것
# 쿼리를 작성하는 목표, 확인할 지표 : 영화별로 배우와 배역을 보여주자. 별도의 컬럼.
# 쿼리 계산 방법 : UNNEST로 풀고, JOIN으로 붙이고 하면 되려나?
# 데이터의 기간 : 
# 사용할 테이블 : 
# Join KEY : 
# 데이터 특징 : 
# 작성 흐름 : FROM - JOIN - WHERE - GROUP BY - HAVING - SELECT- ORDER BY - LIMIT 

SELECT
  title,
  -- actor,
  -- character
  un_actors.actor,
  un_actors.character
FROM `advanced.array_exercises`
CROSS JOIN UNNEST(actors) AS un_actors

문제 3

array_exercises 테이블에서 각 영화(title)별로 배우(actor), 배역(character), 장르(genre)를 출력하세요. 한 Row에 배우, 배역, 장르가 모두 표시되어야 합니다

답:

# 문제 :  array_exercises 테이블에서 각 영화(title)별로 배우(actor), 배역(character), 장르(genre)를 출력하세요. 한 Row에 배우, 배역, 장르가 모두 표시되어야 합니다
# 쿼리를 작성하는 목표, 확인할 지표 : 배우, 배역, 장르 출력 / 한 로우에 하나씩! 모두 표시!
# 쿼리 계산 방법 : unnest로 풀고, join으로 하고
# 데이터의 기간 : 
# 사용할 테이블 : array_exercises
# Join KEY : 
# 데이터 특징 : 
# 작성 흐름 : FROM - JOIN - WHERE - GROUP BY - HAVING - SELECT- ORDER BY - LIMIT 

SELECT
  title,
  un_act.actor,
  un_act.character,
  genre
FROM advanced.array_exercises
CROSS JOIN UNNEST(actors) AS un_act
CROSS JOIN UNNEST(genres) AS genre

문제 4

앱 로그 데이터(app_logs)의 배열을 풀어주세요

답:

SELECT 
  event_date,
  event_timestamp,
  event_name,
  event_para.key,
  event_para.value,
  user_id,
  user_pseudo_id,
  platform
FROM advanced.app_logs
CROSS JOIN UNNEST(event_params) AS event_para
WHERE event_date = "2022-10-01"  # 파티션 꼭 넣기! 안 그러면 데이터가 너무 많음!

문제 5

orders 테이블에서 유저(user_id)별로 주문 금액(amount)의 합계를 PIVOT해주세요. 날짜(order_date)를 행(Row)으로, user_id를 열(Column)으로 만들어야 합니다