繁体   English   中英

在MySQL中,Having子句无法与Join一起使用

[英]Having clause not working with join in MySQL

我想找出某个时期的平均销售价格。

数据集(短):

*products*
productID name 
       1 Beef Burger   
       2 Crispy Chicken Burger

*sale_products*
productID sale_price quantity created       
        1       500   4       2016-01-30 16:19:01
        2       600   5       2016-01-30 17:52:33
        1       450   3       2016-01-30 17:58:33
        2       570   5       2016-02-01 11:57:01

我的查询是:

select products.name, sum(sale_products.sale_price * sale_products.quantity) / sum(sale_products.quantity) as Avarage from sale_products inner join products on sale_products.productID = products.productID and sale_products.created BETWEEN "2016-01-30 16:19:01" and "2016-02-01 11:57:01" group by sale_products.productID  

它给出了我想要的确切结果。

结果:

在此处输入图片说明

但是以前我尝试过该查询:

select products.name, sum(sale_products.sale_price * sale_products.quantity) / sum(sale_products.quantity) as Avarage from sale_products inner join products on sale_products.productID = products.productID group by sale_products.productID having sale_products.created BETWEEN "2016-01-30 16:19:01" and "2016-02-01 11:57:01"

它给出了错误-'具有子句'中的未知列'sale_products.created'。 为什么在这里有子句不起作用?

原因HAVING子句用于指定组或集合函数的条件。 它对GROUP BY子句指定的列进行操作。 在您的情况下, sale_products.created不是分组列,因此您会遇到上述错误。 要进行检查,请将该列放在您的GROUP BY子句中,例如group by sale_products.productID, sale_products.created ,尽管它会产生不希望的结果,但是它将起作用。 您应该将该条件移至WHERE like

where sale_products.created BETWEEN "2016-01-30 16:19:01" and "2016-02-01 11:57:01"

要测试,请检查此演示小提琴http://sqlfiddle.com/#!9/94de5/3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM