Подсчет уникальных записей с помощью предложения WHERE и? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть таблица, которая выглядит следующим образом


    id         |  segment_name
    ----------------------------------
    1          |  seg_1
    ----------------------------------
    2          |  seg_2
    ----------------------------------
    1          |  seg_2
    ----------------------------------
    3          |  seg_1
    ----------------------------------
    1          |  seg_3

И я хочу иметь возможность подключить 2 segment_name s к статистике SQL, чтобы найти количество уникальных идентификаторов. так, например, если я передал seg_1 и seg_2 в SQL, вот желаемый вывод:

    count     
    ----------------------------------
    1        
    ----------------------------------

Я считаю только уникальные идентификаторы, которые попадают в 2 segment names, которые я определил.

в конечном итоге я ищу количество перекрытий сегментов.

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Вам нужен этот запрос?

select count(distinct id)
from t
where segment_name in ('seg_1', 'seg_2')

Вы изменили вопрос.Я думаю, что этот запрос ответит на новый:

select count(distinct a.id)
from (
  select id from t where segment_name = 'seg_1'
) a join (
  select id from t where segment_name = 'seg_2'
) b on a.id = b.id
1 голос
/ 13 мая 2019

Для вашего оригинального вопроса, вы просто хотите count(distinct):

select count(distinct id)
from t
where segment_name in ('seg_1', 'seg_2');

За исправленный вопрос:

select count(*)
from (select id
      from t
      where segment_name in ('seg_1', 'seg_2')
      group by id
      having count(*) = 2
     ) i;
0 голосов
/ 13 мая 2019

Еще одна опция для BigQuery Standard SQL

#standardSQL

SELECT COUNT(DISTINCT id) `count` FROM (
  SELECT id, COUNT(1) OVER(PARTITION BY id) cnt
  FROM `project.dataset.table`
  WHERE segment_name IN ('seg_1', 'seg_2')
) WHERE cnt > 1  

Вместо группировки или самостоятельного объединения используется функция аналитики

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...