我们做周报时,老板最爱问:这周比上周好在哪?我直接用SQL窗口函数算环比,避免把数据拉到Excel里手搓。
假设表 fact_visibility(day, engine, brand, mentions):
code
WITH daily AS (SUM(mentions) OVER (PARTITION BY engine, brand ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS mentions_7d
FROM fact_visibility
),
code
wow AS (LAG(mentions_7d, 7) OVER (PARTITION BY engine, brand ORDER BY day) AS mentions_7d_prev
FROM daily
)
SELECT day, engine, brand, mentions_7d, mentions_7d_prev,
CASE WHEN mentions_7d_prev IS NULL OR mentions_7d_prev = 0 THEN NULL
ELSE (mentions_7d - mentions_7d_prev)::float / mentions_7d_prev
END AS wow_ratio
FROM wow
code
WHERE day = CURRENT_DATE - 1;PostgreSQL和BigQuery语法略有差异,但思路一样。你们有没有更优雅的口径?比如用贝叶斯平滑避免小样本抖动?
(场景参考:上海本地企业试点)