【问题标题】:BiqQuery - How to find unique ids overlapping for multiple categories in a column?BigQuery - 如何查找列中多个类别重叠的唯一 ID?
【发布时间】:2021-03-22 05:08:33
【问题描述】:

我对 BigQuery 和标准 SQL 非常陌生。我可能无法找出解决问题的正确方法。请帮帮我。

我有一个 Country 列和一个 ID 列。示例如下:

国家 | ID
美国 | id_1
美国 | id_2
美国 | id_1
英国 | id_1
英国 | id_1
英国 | id_2
英国 | id_3
澳大利亚 | id_3
澳大利亚 | id_4
澳大利亚 | id_2

我想要一个结果列,例如:

输出 1:所有国家/地区的唯一重叠 ID 值

国家/地区 | Unique_overlapping_ids
美国 | 2
英国 | 3
澳大利亚 | 2

输出 2:所有国家/地区的唯一非重叠 ID 值

国家/地区 | Non_Unique_overlapping_ids
美国 | 0
英国 | 0
澳大利亚 | 1

我有 88 个不同的国家和超过 500 万个唯一 ID

请帮助我。 感谢您的时间和耐心。

【问题讨论】:

  • 欢迎,您有到目前为止尝试过的查询示例吗?
  • 请解释预期输出背后的逻辑,只是 UNIQUE OVERLAPPING UNIQUE non-OVERLAPPING 并不能解释全部 - 因为它可以以多种方式解释
  • @MikhailBerlyant UNIQUE OVERLAPPING 将计算 Country = USA 的唯一 ID,该 ID 在所有其他 Country 值及其自身中重复。因此,如果您查看主表,我们会看到 USA 有 2 个唯一 ID,它们出现在其他国家/地区。同样的逻辑适用于 Country = UK , Country = AUS。 UNIQUE non-OVERLAPPING 表将返回 Country = USA OR Country = UK 或 Country = AUS 的那些唯一 IDS,它们从未出现在其他国家/地区值中,而是出现在其自身中。这有意义吗?对不起,这很令人困惑,但是是的。
  • 与显示的 output1 不匹配...所以请解释为什么在 output1 中美国有 2 而不是 1(只有 id_2 在所有国家/地区之间共享 - 所以我希望看到 1 而不是 2)跨度>
  • @BenP 我什么都没有,因为我很困惑如何解决这个问题。

标签: google-bigquery overlapping distinct-values


【解决方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
select country, 
  count(distinct if(shared, id, null)) as Unique_overlapping_ids,
  count(distinct if(shared, null, id)) as Unique_non_overlapping_ids
from `project.dataset.table` 
join (
  select id, count(distinct country) > 1 shared
  from `project.dataset.table`
  group by id
) using(id)
group by country   

如果应用于您问题的样本数据 - 输出是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2019-01-17
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多