2014-10-22 54 views
-2

查詢組使用w3schools database,列表順序信息用於與以下的列每一個國家(見[]針對每個列的提示/備註)並且在由TotalOrderAmount值降序排列的數據進行排序。SQL通過

•國家
•定單計數[每個國家的訂單數量]
•ItemCount中[所有每個國家的產品數量的總和]
•TotalOrderAmount [所有訂單每個國家的總訂單價值,四捨五入兩個小數點] •AvgOrderSize [TotalOrderAmount /定單計數,四捨五入到兩位小數分]

我有以下的骨架,但我堅持就如何組由國家.. 編輯 - 錯誤1:無法準備陳述(1沒有這樣的欄目:TotalOrderAmount)

SELECT 
s.Country, COUNT(od.OrderID) AS OrderCount, sum(od.quantity) AS ItemCount, ROUND(sum(od.quantity*p.price),2) AS TotalOrderAmount, Avg(TotalOrderAmount/OrderCount) 

FROM Suppliers AS s 

JOIN Products AS p 
    ON p.SupplierID = s.SupplierID 
JOIN  OrderDetails AS od 
    ON od.ProductID = p.ProductID 
JOIN  Orders AS o 
    ON o.OrderID = od.OrderID 

Group by s.Country 

任何幫助表示讚賞!謝謝

+0

你卡在哪裏?你得到一個錯誤或意外的輸出?首先,我建議你刪除's.County後的尾隨逗號,'將's.County'重命名爲'Country',並將這些'sum()'聚合函數中的東西放入 – 2014-10-22 02:01:34

+0

錯誤1:無法準備語句「2」:語法錯誤) – eri 2014-10-22 02:08:28

+0

並且在應用我建議的更改後,錯誤是什麼? – 2014-10-22 02:15:07

回答

-1

在組中你必須包含查詢中的所有列。

+1

不可以。您只包含您需要的列,並且不包含聚合函數中的任何列。 – 2014-10-22 02:14:50

+0

如果您使用postgres,那就是我看到的方式。但是在mysql中,您只設置了您需要的那個。 – 2014-10-22 02:33:28

0

首先,我建議你刪除s.County後,後面的逗號,重命名s.County到s.Country和裝上去的總和()聚合函數

我猜AVG(TotalOrderAmount /定單計數)無效因爲沒有名爲TotalOrderAmount的列。您需要用TotalOrderAmount(ROUND(sum(od.quantity * p.price),2))替換您的表達式,因爲它不作爲列存在,因爲它不存在爲列

而且沒有order count列你需要這樣做