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

BigQuery中如何统计仅出现一次的唯一值(区分Count Distinct)

BigQuery 实现列值唯一频次统计方案

你需要先明确两类去重统计的差异:

  • COUNT(DISTINCT 列名):统计列去重后的所有不同值总数,对应示例数据集{A,A,A,B,B,B,C,D}的结果为4,覆盖A、B、C、D四个值
  • 仅出现一次的值的计数:统计在列中总共只出现过1次的值的总数,对应示例结果为2,覆盖C、D两个值,这是你需要实现的目标

实现逻辑

核心思路是先按目标列分组,计算每个不同值的出现频次,再筛选出频次等于1的值做计数。

可直接运行的SQL示例

1. 同时输出两类统计结果

以下代码用示例测试数据验证逻辑,替换成你的实际表名即可使用:

WITH test_data AS (
  SELECT 'A' AS Letters UNION ALL
  SELECT 'A' UNION ALL
  SELECT 'A' UNION ALL
  SELECT 'B' UNION ALL
  SELECT 'B' UNION ALL
  SELECT 'B' UNION ALL
  SELECT 'C' UNION ALL
  SELECT 'D'
)
SELECT
  COUNT(DISTINCT Letters) AS count_distinct,
  COUNTIF(freq = 1) AS count_unique
FROM (
  SELECT
    Letters,
    COUNT(*) AS freq
  FROM test_data -- 替换为你的实际表名即可
  GROUP BY Letters
)

运行返回结果:

count_distinctcount_unique
42

2. 更简洁的单统计写法

如果只需要获取仅出现一次的值的总数,可以直接用HAVING子句过滤分组结果,写法更精简:

SELECT COUNT(*) AS count_unique
FROM (
  SELECT Letters
  FROM 你的实际表名
  GROUP BY Letters
  HAVING COUNT(*) = 1
)

3. 查看所有仅出现一次的具体值

如果需要列出所有仅出现过一次的值本身,而非仅统计数量,可以用以下语句:

SELECT Letters AS single_occurrence_value
FROM 你的实际表名
GROUP BY Letters
HAVING COUNT(*) = 1

运行后会返回C、D两个值,和你的预期一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:27:14