在SQL中使用COUNT函数

时间:2015-01-27 23:37:08

标签: sql select count

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

我正在尝试将COUNT函数用作与Northwind数据库相关的查询的一部分。查询应返回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函数,而不是更复杂查询的一部分。

5 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

以下查询应该有效。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

其次,您的查询应使用group by而不是distinct。事实上,学习group by比学习distinct更重要,因为您通常可以使用select distinct撰写group by

所以,你要去的地方是:

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;