用于查找重叠客户的 SQL 子查询
Posted
技术标签:
【中文标题】用于查找重叠客户的 SQL 子查询【英文标题】:SQL subquery to find overlapping customers 【发布时间】:2020-10-07 19:06:40 【问题描述】:我正在编写一个 SQL 查询,它可以让我找到在特定销售日期购买了某种产品的客户,然后在不同的日期范围内购买了不同的产品。我想在 from 子句中使用子查询来搜索第一组客户中的第二组客户,但我遇到了一些问题
我的主要问题是 - 在子查询中,我加入了几个不同的表。我需要在查询的最后一个 where 子句中引用其中的 2 个连接表。我是否需要在子查询之外重新加入这些表?我尝试在最后一行用 subq."order date" 和 subq."sku" 交换 o."OrderDate" 和 ol."SKU",因为那是我的表别名,但没有任何运气。
我可以为此使用子查询吗?
SELECT DISTINCT subq."FirstName", subq."LastName", subq."Email"
FROM (
SELECT DISTINCT o."FirstName", o."LastName", o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE p."DisplayName" LIKE '%varietal%'
AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
) AS subq
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020' AND ol."SKU" = 'Red312';
【问题讨论】:
请提供样本数据和期望的结果。 @GordonLinoff 样本数据将包括在 6/26 和 7/3 之间购买该品种的人的姓名/电子邮件。然后是另一个在 9/22 到 10/5 之间购买 red312 的人的名单。期望的结果是获得同时属于这两个类别的人的姓名和电子邮件 【参考方案1】:我认为您实际上想要 2 个查询的交集...
SELECT DISTINCT o."FirstName", o."LastName", o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE p."DisplayName" LIKE '%varietal%'
AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
INTERSECT
SELECT DISTINCT o."FirstName", o."LastName", o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020'
AND ol."SKU" = 'Red312';
Learn more about set operators like UNION, UNION ALL, INTERSECT and EXCEPT
【讨论】:
这工作完美无缺-谢谢!我把事情复杂化了以上是关于用于查找重叠客户的 SQL 子查询的主要内容,如果未能解决你的问题,请参考以下文章