2013-09-23 100 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