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

Google BigQuery中保留含4种不同服务类型的重复订单记录

BigQuery 筛选恰好包含4种不同服务类型的完整订单记录方案

核心逻辑:先按订单号Order_no分组统计每个订单关联的去重服务类型数量,再保留数量恰好为4的订单对应的所有原始行,提供两种可直接运行的写法:

写法1:窗口函数实现(大表性能更优)

不需要额外关联表,一次扫描就能出结果,适合数据量较大的场景:

SELECT * EXCEPT(service_type_cnt)
FROM (
  SELECT
    *,
    COUNT(DISTINCT Service_type) OVER (PARTITION BY Order_no) AS service_type_cnt
  FROM `替换为你的lipid表在BigQuery中的完整路径`
)
WHERE service_type_cnt = 4

语法说明:EXCEPT(service_type_cnt)会把统计用的临时计数字段从最终结果里剔除,返回和原表结构完全一致的符合条件的记录。

写法2:子查询关联实现(逻辑更直观)

先筛出符合要求的订单号,再关联捞取对应所有行,适合SQL新手理解逻辑:

SELECT *
FROM `替换为你的lipid表在BigQuery中的完整路径`
WHERE Order_no IN (
  SELECT Order_no
  FROM `替换为你的lipid表在BigQuery中的完整路径`
  GROUP BY Order_no
  HAVING COUNT(DISTINCT Service_type) = 4
)

注意事项

  • 统计时使用COUNT(DISTINCT Service_type)是为了兼容同一订单下重复录入相同服务类型的脏数据场景;如果业务规则明确保证同一个Order_no下不会出现重复的Service_type,可以替换为COUNT(*),统计速度会更快。
  • 运行前需要把SQL里的表路径占位符,替换为你自己项目下lipid表的实际地址,格式为项目名.数据集名.lipid。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:18:22