首先,这是作业的一部分。
我正在尝试将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函数,而不是更复杂查询的一部分。
答案 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;