在 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
注意:虽然这不是问题的一部分,但建议使用显式 join
s 而不是您正在使用的已弃用的隐式连接语法。在这种情况下,查询将如下所示:
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
首先,这是作业的一部分。
我正在尝试使用 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
注意:虽然这不是问题的一部分,但建议使用显式 join
s 而不是您正在使用的已弃用的隐式连接语法。在这种情况下,查询将如下所示:
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