BiqQuery — Как найти уникальные идентификаторы, перекрывающиеся для нескольких категорий в столбце?

Я новичок в BigQuery и стандартном SQL. Возможно, я не смогу найти правильный подход к решению проблемы. Пожалуйста, помогите мне.

У меня есть столбец страны и столбец идентификатора. Пример показан ниже:

Страна | 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 различных стран и более 5 миллионов уникальных идентификаторов.

Пожалуйста, помогите мне. Спасибо за ваше время и терпение.

Добро пожаловать, у вас есть пример запроса, который вы пробовали до сих пор?

Ben P 10.12.2020 19:51

пожалуйста, объясните логику ожидаемых результатов, просто UNIQUE OVERLAPPING и UNIQUE non-OVERLAPPING не объясняют всего, так как это можно интерпретировать по-разному

Mikhail Berlyant 10.12.2020 20:08

@MikhailBerlyant UNIQUE OVERLAPPING будет подсчитывать уникальные идентификаторы для Country = USA, которые повторяются во всех других значениях Country, а также в самом себе. Итак, если вы посмотрите на основную таблицу, мы увидим, что у США есть 2 уникальных идентификатора, которые появляются в других странах. Та же логика применима к Country = UK , Country = AUS. Таблица UNIQUE non-OVERLAPPING вернет те уникальные IDS для Country = USA OR Country = UK или Country = AUS, которые никогда не появлялись в других значениях страны, кроме самой себя. Имеет ли это смысл? Извините, это очень запутанно, но да.

Ridhi 10.12.2020 22:10

это не соответствует представленному output1 ... поэтому объясните, почему в output1 usa есть 2, а не 1 (только id_2 является общим для всех стран, поэтому я ожидал увидеть 1, а не 2)

Mikhail Berlyant 10.12.2020 22:13

@BenP У меня пока ничего нет, так как я не понимаю, как к этому подойти.

Ridhi 10.12.2020 22:15

@MikhailBerlyant правильно! хорошее наблюдение ... поэтому, если Country = USA имеет одно или несколько перекрывающихся значений в других странах, мы классифицируем группу в выход 1. Поскольку id_2 является общим для США и Великобритании, мы объединяем их в перекрывающееся значение...

Ridhi 10.12.2020 22:16

Итак, уточните - должно ли это быть 1 или 2 для США на основе приведенного вами примера? в вашем вопросе - вы используете формулировку across all the countries, которая, я думаю, сбивает с толку. так это across all the countries или across at least one other country?

Mikhail Berlyant 10.12.2020 22:21

@MikhailBerlyant извините за неясность. Когда Country = USA, id_1 используется совместно с 1 или несколькими странами, кроме самих США, мы классифицируем id_1 как перекрывающееся значение для США. Когда Country = USA, id_2 используется совместно с 1 или несколькими странами, кроме самих США, мы классифицируем id_2 как перекрывающееся значение для США. Итак, у США есть 2 пересекающихся значения с другими странами.

Ridhi 10.12.2020 22:29

@MikhailBerlyant Это должно быть хотя бы в одной стране! Извините, что недостаточно ясно выразился.

Ridhi 10.12.2020 22:33

конечно. понятно. теперь это имеет больше смысла :о)

Mikhail Berlyant 10.12.2020 22:34

@MikhailBerlyant Спасибо большое!!! ^_^

Ridhi 10.12.2020 22:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
377
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже приведен стандартный SQL BigQuery.

#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   

если применить к выборке данных из вашего вопроса - вывод

Другие вопросы по теме