显示所有在夏季没有购买任何东西的客户

Show all customers who haven't bought anything in the summer months

我有两个表 "OEHR_Orders" 和 "OEHR_Customers"。

客户和订单都有链接 Customer_ID。 我现在想显示在 7 月或 8 月没有购买任何东西的所有客户。这是我的查询:

SELECT DISTINCT C.CUST_LAST_NAME ||'.'||SUBSTR(C.CUST_First_Name,1,1) AS "Name"
FROM OEHR_Customers C INNER JOIN OEHR_ORDERS O
ON C.Customer_ID = O.Customer_ID
WHERE EXTRACT(MONTH FROM O.Order_Date) NOT BETWEEN '7' and '8'

不幸的是,这个查询没有给我想要的结果。

一些想法?

SELECT DISTINCT CUST_LAST_NAME ||'.'||SUBSTR(CUST_First_Name,1,1) AS "Name"
FROM OEHR_Customers
WHERE Customer_Id not in (Select Customer_ID from OEHR_ORDERS
            WHERE EXTRACT(MONTH FROM Order_Date) NOT BETWEEN '7' and '8')

我倾向于使用 GROUP BYHAVING:

SELECT C.CUST_LAST_NAME || '.' || SUBSTR(C.CUST_First_Name, 1, 1) AS "Name"
FROM OEHR_Customers C INNER JOIN
     OEHR_ORDERS O
     ON C.Customer_ID = O.Customer_ID
GROUP BY C.CUST_LAST_NAME || '.' || SUBSTR(C.CUST_First_Name, 1, 1)
HAVING SUM(CASE WHEN EXTRACT(MONTH FROM O.Order_Date) BETWEEN 7 and 8
                THEN 1 ELSE 0 END) = 0;

HAVING 子句计算第 7 个月和第 8 个月出现的次数。然后它会过滤掉在这几个月内购买过商品的客户。

您的查询版本仅获取未在这些月份进行购买的客户。