0

接受这个查询:

SELECT c.CustomerID, c.AccountNumber, COUNT(*) AS CountOfOrders,
    SUM(s.TotalDue) AS SumOfTotalDue
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderheader AS s ON c.CustomerID = s.CustomerID
GROUP BY c.CustomerID, c.AccountNumber
ORDER BY c.CustomerID;

我希望 COUNT(*) 计算 Sales.Customer 中的行数,但令我惊讶的是,它计算了连接表中的行数。

知道这是为什么吗?另外,有没有办法明确指定应该对哪个表 COUNT() 进行操作?

4

1 回答 1

3

查询处理订单...

FROM 子句在 SELECT 子句之前处理 - 也就是说 - 到 SELECT 开始发挥作用时,它只有一个(虚拟)表从中选择 - 即它们连接的各个表(JOIN) ,过滤(WHERE)等。

如果您只想计算一张桌子,那么您可以尝试几件事......

COUNT(DISTINCT table1.id)

或者将您要计数的表转换为包含 count() 的子查询

于 2013-09-26T20:33:04.363 回答