【发布时间】:2017-11-02 08:56:46
【问题描述】:
我正在自学 SQL,并且一直在使用 W3Schools 网站。在他们的网站上,他们有一个虚拟数据库,用于演示不同的事物。您也可以使用它来尝试自己的事情。他们的 TryIt 编辑器可以在https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_distinct 找到
在研究了他们的例子后,我一直在发明问题并试图回答它们。但是,我遇到了一些似乎不起作用的问题,我想知道这是我的代码中的错误、W3Schools 网站上的错误还是仅仅是 SQL 的限制。
当我运行以下代码时,它按预期工作并返回每个客户的订单数量。
SELECT c.CustomerName, COUNT(o.OrderID) AS NumberOfOrders
FROM Customers AS C
LEFT JOIN Orders AS o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerName
然后我决定尝试扩展查询,以使用以下代码提供这些订单的总金额。
SELECT c.CustomerName, COUNT(o.OrderID) AS NumberOfOrders, SUM(od.Quantity * p.price) AS TotalOfOrders
FROM (((Customers AS C
LEFT JOIN Orders AS o ON c.CustomerID = o.CustomerID)
LEFT JOIN OrderDetails AS od ON o.OrderID = od.OrderID)
LEFT JOIN Products AS p ON od.ProductID = p.ProductID)
现在,当我在 OrderID 上运行代码计数时不起作用。例如,对于客户 Ana Trujillo Emparedados y helados (CustomerID 2),它返回 2 而不是 1。这是他们的一个订单包含的商品数量。
我是否遗漏了一些明显的东西?
【问题讨论】:
-
正如我在帖子中所说,它在 W3Schools 网站上,所以不确定底层版本是什么。
-
你使用的是什么数据库?
-
它是 W3Schools 上的 Demo 数据库。按照他们的说法,它是“著名的 Northwind 示例数据库(包含在 MS Access 和 MS SQL Server 中)”。
-
第二个查询也需要一个 GROUP BY。