2013-09-23 145 views
3

列出所有产品(PRODUCT_ID,PRODUCT_NAME)及其剩余库存(QUANTITY_IN_STOCK - REORDER_POINT)。仅列出剩余库存超过平均REORDER_QTY值的行。语法混淆SQL

到目前为止,我们有:

SELECT product_name, product_id, quantity_in_stock - reorder_point 
FROM product 
WHERE quantity_in_stock - reorder_point > avg(reorder_qty) 
GROUP BY product_name; 

我们遇到的问题是与AVG(reorder_qty),但我们做了一些谷歌搜索,并通过我们的文字看着。任何帮助,将不胜感激。 :)

我明白这是一个典型的禁忌问题,但我们并不是要求答案,而是解释我们出错的位置,这将导致我们自己找到答案。 :)

谢谢!

回答

2

您不能在WHERE子句中使用像avg这样的聚合函数,因为WHERE管理哪些行将转换为 GROUP BY语句。您需要对分组数据的输出施加条件。 HAVING子句执行此操作。

0

执行GROUP BY时,SELECT无法引用不在GROUP BY中的任何列。此外,任何需要聚合函数的过滤都必须作为HAVING子句的一部分来完成。考虑使用子查询来获取平均重新订购数量。

2

where子句正在寻找过滤由部分语句返回的行。

它需要一段时间来适应,但真正有两个部分,以您的问题..他们都只是碰巧是指同一来源:

1.什么是平均再订货量

and

2.do我有更多的股票比平均重新订购数量。

我会建议你尝试和分开做这两个步骤,然后尝试并结合它们。首先,什么是查询会告诉您平均重新订购数量,然后将该值用作常量尝试并让您的更大查询生效。

一旦你有这个工作,你会希望很容易用你的查询替换你的固定值来获得价值。

+0

除非我误解你的问题;) – gordatron