哪里vs拥有-为什么设置日期条件时会得到不同的结果? MySQL的

问题描述

当我在代码的“ WHERE”部分和“ HAVING”部分设置日期条件时,我试图了解MysqL如何处理日期条件。您能否帮助我了解以下情况下逻辑上的区别?当我使用HAVING应用日期条件时,如何只得到一种产品,而如果使用WHERE却得到了两种产品?

问题:编写一个SQL查询,报告仅在2019年春季销售的产品。也就是说,在2019-01-01至2019-03-31之间。

FROM Sales s 
JOIN Product p 
ON s.product_id = p.product_id
GROUP by s.product_id
HAVING min(sale_date)>='2019-01-01' AND max(sale_date)<='2019-03-31'

  1. 具有选项(正确的选项)

    FROM Sales s 
    JOIN Product p 
    ON s.product_id = p.product_id
    WHERE sale_date BETWEEN '2019-01-01' AND '2019-03-31'
    GROUP by s.product_id
    
    
    
  2. 具有结果 {“标头”:[“ product_id”,“产品名称”],“值”:[[1,“ S8”]]}

  3. 在哪里选择

    Microsoft.ServiceBus.Messaging.brokeredMessage
  4. 结果在哪里 {“标头”:[“ product_id”,“产品名称”],“值”:[[1,“ S8”], [2,“ G4”] ]}

G4来自哪里2? (如果这很琐碎,请提前道歉,我确实是在尝试自己学习,而且没有人要问。)

解决方法

WHERE正在过滤行以仅考虑1月,2月和3月的销售额。因此,包括该期间内所有销售的产品。

另一方面,HAVING正在考虑产品的所有销售。然后,针对每种产品,它查看最小和最大日期。仅包括在1月,2月和3月具有所有销售额的产品。

考虑product_id = 2。它在2月有销售,因此将包含在WHERE子句中。但是,它在6月也有销售。因此,最大日期是6月-并且HAVING子句将其过滤掉。