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

BigQuery SQL:按唯一ID分组时条件统计指定代码列值

BigQuery SQL实现指定代码列表的匹配计数需求

需求说明

针对给定的ID和Code表,需要为每个唯一ID生成Count列:当该ID在指定代码列表['323F','327F','328F','333F','357F']中仅存在1条匹配记录时,Count为1;其余情况(匹配数为0或≥2)均为0。

实现方案

简洁版SQL(推荐)

直接通过分组+条件计数实现,无需额外中间表,执行效率更高:

SELECT 
  ID,
  CASE 
    WHEN COUNT(CASE WHEN Code IN ('323F', '327F', '328F', '333F', '357F') THEN 1 END) = 1 THEN 1
    ELSE 0
  END AS Count
FROM 
  `your-project.your-dataset.your-table` -- 替换为你的实际表路径
GROUP BY 
  ID
ORDER BY 
  ID;

分步版SQL(逻辑更直观)

通过CTE拆分步骤,便于理解每一步的处理逻辑:

-- 1. 筛选出属于指定代码列表的记录
WITH filtered_codes AS (
  SELECT ID, Code
  FROM `your-project.your-dataset.your-table`
  WHERE Code IN ('323F', '327F', '328F', '333F', '357F')
),
-- 2. 统计每个ID在指定列表中的匹配数量
id_match_stats AS (
  SELECT ID, COUNT(*) AS match_count
  FROM filtered_codes
  GROUP BY ID
)
-- 3. 生成最终结果:覆盖所有唯一ID,判断匹配数量是否为1
SELECT 
  original.ID,
  CASE 
    WHEN COALESCE(stats.match_count, 0) = 1 THEN 1
    ELSE 0
  END AS Count
FROM (SELECT DISTINCT ID FROM `your-project.your-dataset.your-table`) original
LEFT JOIN id_match_stats stats ON original.ID = stats.ID
ORDER BY original.ID;

核心逻辑解释

  • 条件计数:COUNT(CASE WHEN Code IN (...) THEN 1 END)会自动忽略不符合条件的记录(返回NULL),仅统计指定列表内的Code数量。
  • 分支判断:通过CASE语句判断统计出的匹配数是否等于1,对应设置Count的取值。
  • 全ID覆盖:分步版通过左连接确保原表中所有唯一ID都被包含,即使该ID在指定列表中没有匹配记录(此时匹配数为0,Count为0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:06:13