считать уникальные записи, которые имеют 2, где условия - bigquery - PullRequest
0 голосов
/ 04 июня 2019

У меня есть таблица, например:

email     | segment               | exit
---------------------------------------------
1@aol.com | abandoned_cart        | true
1@aol.com | purchased_last_7_days | false
2@aol.com | abandoned_cart        | true
2@aol.com | purchased_last_7_days | false
3@aol.com | abandoned_cart        | true

Я пытаюсь написать запрос, чтобы получить количество уникальных адресов электронной почты, имеющих ОБА abandoned_cart = true и purchase_last_7_days = false

Это то, что я пытался, но получил 0:

SELECT COUNT(DISTINCT email)
FROM `table_seg_changes` 
WHERE (segment_slug = 'purchased_last_7_days' AND exit = false) AND (segment_slug = 'abandoned_cart' AND exit = true) 

1 Ответ

1 голос
/ 04 июня 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT email
FROM `project.dataset.table`
GROUP BY email 
HAVING COUNTIF(
    (segment = 'abandoned_cart' AND exit) OR 
    (segment = 'purchased_last_7_days' AND NOT exit)
  ) = 2  

Вы можете проверить, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1@aol.com' email, 'abandoned_cart' segment, TRUE exit UNION ALL
  SELECT '1@aol.com', 'purchased_last_7_days', FALSE UNION ALL
  SELECT '2@aol.com', 'abandoned_cart', TRUE UNION ALL
  SELECT '2@aol.com', 'purchased_last_7_days', FALSE UNION ALL
  SELECT '3@aol.com', 'abandoned_cart', TRUE
)
SELECT email
FROM `project.dataset.table`
GROUP BY email 
HAVING COUNTIF(
    (segment = 'abandoned_cart' AND exit) OR 
    (segment = 'purchased_last_7_days' AND NOT exit)
  ) = 2  

с результатом

Row email    
1   1@aol.com    
2   2@aol.com    

Примечание: выше предполагается, что для одного и того же электронного письма нет повторяющихся записей для сегментов / значений выхода (как это выглядит в вашем примере)

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