首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择没有购买产品X的客户ID

选择没有购买产品X的客户ID
EN

Stack Overflow用户
提问于 2017-11-16 17:59:15
回答 3查看 886关注 0票数 1

我有一张顾客身份证和购买的产品的表。客户ID可以在一段时间内购买多个产品。

customerID,productID

在BigQuery中,我需要为那些没有购买A产品的人找到CustomerID。

我一直在绕圈,试图做自我连接,内心的连接,但我是无知的。

任何帮助都很感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-16 18:01:30

代码语言:javascript
复制
select customerID
from your_table
group by customerID
having sum(case when productID = 'A' then 1 else 0 end) = 0

并检查它是否只包含一个名称。

代码语言:javascript
复制
sum(case when productID contains 'XYZ' then 1 else 0 end) = 0
票数 3
EN

Stack Overflow用户

发布于 2017-11-16 18:14:35

下面是用于BigQuery标准SQL的

代码语言:javascript
复制
#standardSQL
SELECT CustomerID
FROM `project.dataset.yourTable`
GROUP BY CustomerID
HAVING COUNTIF(Product = 'A') = 0

您可以使用下面的虚拟数据来测试/播放它

代码语言:javascript
复制
#standardSQL
WITH `project.dataset.yourTable` AS (
  SELECT 1234 CustomerID, 'A' Product UNION ALL
  SELECT 11234, 'A' UNION ALL
  SELECT 4567, 'A' UNION ALL
  SELECT 7896, 'C' UNION ALL
  SELECT 5432, 'B' 
)
SELECT CustomerID
FROM `project.dataset.yourTable`
GROUP BY CustomerID
HAVING COUNTIF(Product = 'A') = 0  

我如何调整它,使它可能是productID包含"xyz“

代码语言:javascript
复制
#standardSQL
WITH `project.dataset.yourTable` AS (
  SELECT 1234 CustomerID, 'Axyz' Product UNION ALL
  SELECT 11234, 'A' UNION ALL
  SELECT 4567, 'A' UNION ALL
  SELECT 7896, 'Cxyz' UNION ALL
  SELECT 5432, 'B' 
)
SELECT CustomerID
FROM `project.dataset.yourTable`
GROUP BY CustomerID
HAVING COUNTIF(REGEXP_CONTAINS(Product, 'xyz')) = 0
票数 1
EN

Stack Overflow用户

发布于 2017-11-16 18:11:30

如果您有一个客户表,您可能需要:

代码语言:javascript
复制
select c.*
from customers c
where not exists (select 1 from t where t.customer_id = c.customer_id and t.proectID = 'A');

这将返回那些没有购买的客户以及那些只购买产品A的客户。当然,在您的数据中,客户的定义可能是客户已经购买了,在这种情况下,我喜欢Juergen的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47336308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档