在 SQL 中使用 COUNT 函数

Using the COUNT function in SQL

首先,这是作业的一部分。

我正在尝试使用 COUNT 函数作为与 Northwind 数据库相关的查询的一部分。查询应该 return CustomerID、CompanyName 和 每个客户的订单数量

当然前两部分很简单,但我无法使 COUNT 函数正常工作。到目前为止我的查询是:

SELECT DISTINCT Customers.CustomerID, Customers.CompanyName, COUNT(Customers.CustomerID)
FROM Orders, Customers
WHERE Customers.CustomerID = Orders.CustomerID;

以这种方式使用 COUNT 的正确语法是什么?它看起来像:

CompanyID | CompanyName | # of orders
    1     | Company A   | 4
    2     | Company B   | 3
    3     | Company C   | 5

到目前为止,所有示例都是单独使用 COUNT 函数,而不是更复杂查询的一部分。

您缺少 group by 子句。您的查询应如下所示

select CustomerID, Customers.CompanyName, count(CustomerID)
from Orders JOIN Customers using(CustomerID)
group by CustomerID;

请注意,我使用了 Join 语法,它在连接表时更加简洁。

使用 COUNT() 等聚合函数时,所有列都必须是聚合函数的一部分。 GROUP BY 语句应该可以解决您的问题。 http://www.w3schools.com/sql/sql_groupby.asp

首先,如果您正在学习 SQL,您应该学习正确的显式 join 语法。简单规则:永远不要在 from 子句中使用逗号。

其次,您的查询应该使用 group by 而不是 distinct。其实学习group by比学习distinct更重要,因为一般可以用group by.

来写select distinct

那么,您要去的地方是:

SELECT c.CustomerID, c.CompanyName, COUNT(c.CustomerID)
FROM Orders o JOIN
     Customers c
     ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.CompanyName;

您需要一个 group by 子句,它允许您将结果分成几组,并执行聚合函数(count,在本例中),每组:

SELECT   Customers.CustomerID, Customers.CompanyName, COUNT(*)
FROM     Orders, Customers
WHERE    Customers.CustomerID = Orders.CustomerID;
GROUP BY Customers.CustomerID, Customers.CompanyName

注意:虽然这不是问题的一部分,但建议使用显式 joins 而不是您正在使用的已弃用的隐式连接语法。在这种情况下,查询将如下所示:

SELECT   Customers.CustomerID, Customers.CompanyName, COUNT(*)
FROM     Orders
JOIN     Customers ON Customers.CustomerID = Orders.CustomerID;
GROUP BY Customers.CustomerID, Customers.CompanyName

下面的查询应该有效。

    SELECT Customers.CustomerID, Customers.CompanyName, COUNT(*)
    FROM Orders, Customers
    WHERE Customers.CustomerID = Orders.CustomerID group by Orders.CustomerID