2014-10-22 49 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列你需要这样做