3

列出所有产品(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 搜索并查看了我们的文本。任何帮助,将不胜感激。:)

我知道问家庭作业问题通常是禁忌,但我们不是在寻求答案,而是对我们哪里出错的解释,这将引导我们自己找到答案。:)

谢谢!

4

3 回答 3

2

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

于 2013-09-23T16:52:34.630 回答
2

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

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

1.平均再订货量是多少

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

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

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

于 2013-09-23T16:59:39.317 回答
0

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

于 2013-09-23T16:54:51.257 回答