Google bigquery 计算具有2个where条件的唯一项-bigquery

Google bigquery 计算具有2个where条件的唯一项-bigquery,google-bigquery,Google Bigquery,我有一张这样的桌子: 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

我有一张这样的桌子:

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

我正在尝试编写一个查询,以获取同时拥有
放弃的购物车
=
true
最近7天购买的
=
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) 

下面是BigQuery标准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    
注意:以上假设同一封电子邮件的段/出口值没有重复条目(如您的示例所示)