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入門