[英]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.