BigQuery 입문
Matthew Forrest
Field CTO


SELECT customer_id, order_date, order_total, ROW_NUMBER() OVER(PARTITION BY customer_idORDER BY order_date) AS order_sequence FROM orders;
ROW_NUMBER(): 행 번호를 반환하는 윈도 함수OVER(): 윈도 프레임 정의PARTITION BY customer_id: 고객 기준으로 그룹화ORDER BY order_date: 각 파티션 내에서 정렬order_sequence: 윈도 함수 결과SELECT
product_id,
product_photos_qty,
-- 각 행의 서수 순위
RANK() OVER(
ORDER BY product_photos_qty DESC
) as rank,
-- 각 행의 백분위 순위
PERCENT_RANK() OVER(
ORDER BY product_photos_qty
) as percent
FROM ecommerce.ecomm_products
ORDER BY product_photos_qty DESC;

SELECT
product_id,
-- 이전 행의 값을 반환
LAG(product_photos_qty) OVER(
ORDER BY product_photos_qty
) as lag,
product_photos_qty,
-- 다음 행의 값을 반환
LEAD(product_photos_qty) OVER(
ORDER BY product_photos_qty
) as lead
FROM ecommerce.ecomm_products
ORDER BY product_photos_qty DESC;

SELECT
order_id,
order_timestamp,
SUM(cost) OVER(
ORDER BY order_timestamp
ROWS BETWEEN 2 PRECEDING
AND CURRENT ROW) as rolling_avg
FROM sales_data
ORDER BY order_timestamp
행 기준 경계 옵션:
UNBOUNDED PRECEDING: 이전의 모든 행UNBOUNDED FOLLOWING: 이후의 모든 행[INT] ROWS PRECEDING: 지정한 개수만큼 이전 행[INT] ROWS FOLLOWING: 지정한 개수만큼 이후 행SELECT
product_id,
product_photos_qty,
RANK() OVER(
ORDER BY product_photos_qty DESC
) as rank
FROM ecommerce.ecomm_products
-- QUALIFY로 필터링
QUALIFY rank < 4
ORDER BY product_photos_qty DESC;

HAVING은 사용할 수 없음BigQuery 입문