列出所有产品(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搜索并浏览了我们的文字。任何帮助,将不胜感激。 :)
我理解提问作业问题通常是禁忌,但我们不是要求答案,而是解释我们哪里出错会导致我们自己回答问题。 :)
谢谢!
答案 0 :(得分:2)
您不能在WHERE子句中使用像avg这样的聚合函数,因为WHERE控制哪些行进入 GROUP BY语句。您需要对分组数据的输出施加条件。 HAVING子句就是这样做的。
答案 1 :(得分:2)
where子句希望过滤语句的from部分返回的行。
需要一段时间才能习惯,但实际上你的问题有两个部分......它们都碰巧引用相同的来源:
1.平均重新订购数量是什么
和
2.我的库存比平均重新订购数量更多。
我建议你尝试分别执行这两个步骤然后尝试将它们组合起来。首先,什么是将告诉您平均重新订购数量的查询,然后将该值用作常量尝试并使您的更大查询起作用。
一旦你完成了这项工作,你就会发现很容易用你的查询替换你的固定值来获得价值。
答案 2 :(得分:0)
执行GROUP BY
时,SELECT
无法引用任何不属于GROUP BY
的列。此外,任何需要聚合函数的过滤都必须作为HAVING子句的一部分来完成。请考虑使用子查询来获取平均重新订购数量。