SQL Server 如何找到从每个商店购买产品的客户?

Posted

技术标签:

【中文标题】SQL Server 如何找到从每个商店购买产品的客户?【英文标题】:SQL Server How to Find the customers who have bought a product from EACH store? 【发布时间】:2013-03-20 03:57:13 【问题描述】:

我正在尝试编写一个查询,该查询将列出从德克萨斯州的每一家商店购买过商品的所有客户。

所以这里有 4 个表和它们的属性:

Customers:
customerID, CustomerName 

Purchases:
CustomerID, ProductID 

StoresInventory:
StoreID, ProductID

StoreLocation:
StoreID, State

我可以查询返回德克萨斯州的所有商店,但我不确定如何检查客户是否从所有这些商店购买了产品。另外,我不能使用countaggregation。 有人知道怎么做吗?

【问题讨论】:

好吧,我已经尝试使用列出德克萨斯州商店的子查询,但是,我无法弄清楚如何准确地使用此子查询以仅在匹配时返回结果。我写的查询返回了从德克萨斯州至少一家商店购买的所有客户,这是不正确的。 【参考方案1】:

试试这样的:

Select c.CustomerId From Customers c
Inner Join Purchases p on C.CustomerId=p.CustomerId
Inner Join StoresInventory s on s.ProductID=p.ProductID
Group By c.CustomerId
Having COUNT(Distinct s.StoreId)=(Select Count(Distinct StoreId) From StoreLocation Where State='Texas')

【讨论】:

不使用 count 怎么办?【参考方案2】:

除非 ProductID 对 Store 来说是唯一的;您想要的数据未存储在架构中。您知道客户购买了哪些产品以及哪些商店储存了这些产品,但您不知道客户从哪家商店购买了产品。

【讨论】:

是的,假设 ProductID 对于商店是唯一的。所以可以通过productID获取店铺信息。抱歉,我试图简化示例。【参考方案3】:
SELECT a.customerid
FROM purchases a
JOIN store_inventory b
    ON a.productid=b.productid
GROUP BY  a.customerid
HAVING count(distinct storeid)= 
    (SELECT count(*)
    FROM store_location s);

【讨论】:

以上是关于SQL Server 如何找到从每个商店购买产品的客户?的主要内容,如果未能解决你的问题,请参考以下文章

自己在apache+php+sql server下搭建了个网站,要怎么上传到腾讯云呢?腾讯云如何使用,如何购买?

如何从 SQL Server 表中提取第二高的产品使用率?

sql语句,合并多条记录中的相同字段。

具有相同表数据 SQL Server 的多个联接

PL/SQL: INSTR(), SUBSTR(), 如何从多选列表中提取值

应用商店连接,首先在应用购买中添加