You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BigQuery SQL为销售数据新增子类别列并匹配UPC主表?

方案可行性分析

BigQuery完全适配你的需求,相比Connected Sheets有核心优势:

  • 处理4年大规模销售数据毫无压力,不会出现Sheets的卡顿、函数超时或数据量限制问题
  • SQL的JOIN逻辑比VLOOKUP/FILTER更灵活,能原生解决重复UPC和停产商品匹配缺失的问题,不会像Sheets那样直接返回错误值
  • 后续对接数据可视化工具(如Data Studio)更顺畅,无需在Sheets中做繁琐的中间转换
具体SQL写法

假设你的表结构如下:

  • 销售数据表:sales_data,包含字段product_name, sales_volume, main_category, upc
  • 产品主表:product_master,包含字段upc, sub_category,可选字段is_discontinued(停产标记)、update_timestamp(数据更新时间)

第一步:清洗主表重复UPC

如果主表存在同一UPC对应多条记录的情况,先通过窗口函数筛选唯一有效记录(比如优先保留非停产、最新更新的条目):

WITH cleaned_product_master AS (
  SELECT
    upc,
    sub_category,
    -- 按「非停产优先、最新更新优先」排序,给每个UPC的记录编号
    ROW_NUMBER() OVER (
      PARTITION BY upc 
      ORDER BY is_discontinued ASC, update_timestamp DESC
    ) AS row_num
  FROM `your-project-id.your-dataset-id.product_master`
)
-- 只保留每个UPC的第一条有效记录
SELECT upc, sub_category
FROM cleaned_product_master
WHERE row_num = 1

第二步:关联销售数据与清洗后的主表

用LEFT JOIN确保所有销售数据都被保留,即使UPC匹配不到(比如停产商品或主表无记录),子类别列会显示自定义占位值(如「未匹配」):

WITH cleaned_product_master AS (
  SELECT
    upc,
    sub_category,
    ROW_NUMBER() OVER (
      PARTITION BY upc 
      ORDER BY is_discontinued ASC, update_timestamp DESC
    ) AS row_num
  FROM `your-project-id.your-dataset-id.product_master`
)
SELECT
  s.product_name,
  s.sales_volume,
  s.main_category,
  s.upc,
  -- 用COALESCE处理匹配缺失的情况,替换为你需要的文本
  COALESCE(m.sub_category, '未匹配') AS sub_category
FROM `your-project-id.your-dataset-id.sales_data` s
LEFT JOIN cleaned_product_master m
ON s.upc = m.upc

额外说明

  • 如果主表没有is_discontinued或update_timestamp字段,可以去掉ORDER BY里的对应部分,只按PARTITION BY upc取第一条记录
  • 查询结果可直接导出到可视化工具,或创建视图用于后续数据分析

内容的提问来源于stack exchange,提问作者Sean Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:15:36