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,
-- Ordinal rank for each row
RANK() OVER(
ORDER BY product_photos_qty DESC
) as rank,
-- Percentile rank for each row
PERCENT_RANK() OVER(
ORDER BY product_photos_qty
) as percent
FROM ecommerce.ecomm_products
ORDER BY product_photos_qty DESC;

SELECT
product_id,
-- Returns value from previous row
LAG(product_photos_qty) OVER(
ORDER BY product_photos_qty
) as lag,
product_photos_qty,
-- Returns value from next row
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
-- Filter using QUALIFY
QUALIFY rank < 4
ORDER BY product_photos_qty DESC;

HAVING,因為未進行聚合BigQuery 入門