SQL中的语法混淆

时间:2013-09-23 16:46:30

标签: sql average

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

到目前为止,我们已经:

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),但我们进行了一些Google搜索并浏览了我们的文字。任何帮助,将不胜感激。 :)

我理解提问作业问题通常是禁忌,但我们不是要求答案,而是解释我们哪里出错会导致我们自己回答问题。 :)

谢谢!

3 个答案:

答案 0 :(得分:2)

您不能在WHERE子句中使用像avg这样的聚合函数,因为WHERE控制哪些行进入 GROUP BY语句。您需要对分组数据的输出施加条件。 HAVING子句就是这样做的。

答案 1 :(得分:2)

where子句希望过滤语句的from部分返回的行。

需要一段时间才能习惯,但实际上你的问题有两个部分......它们都碰巧引用相同的来源:

1.平均重新订购数量是什么

2.我的库存比平均重新订购数量更多。

我建议你尝试分别执行这两个步骤然后尝试将它们组合起来。首先,什么是将告诉您平均重新订购数量的查询,然后将该值用作常量尝试并使您的更大查询起作用。

一旦你完成了这项工作,你就会发现很容易用你的查询替换你的固定值来获得价值。

答案 2 :(得分:0)

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