【问题标题】:Show all customers who haven't bought anything in the summer months显示在夏季月份没有购买任何东西的所有客户
【发布时间】:2015-08-29 12:49:40
【问题描述】:

我有两个表“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'

很遗憾,这个查询没有给我想要的结果。

一些想法?

【问题讨论】:

    标签: sql oracle inner-join


    【解决方案1】:
    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')
    

    【讨论】:

      【解决方案2】:

      我倾向于使用 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 个月出现的次数。然后它会过滤掉在这几个月内进行过购买的客户。

      您的查询版本只会吸引那些不在这几个月内购买的客户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多