采取此查询:
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()应该在哪个表上运行?
答案 0 :(得分:3)
查询处理订单...
在SELECT子句之前处理FROM子句 - 也就是说 - 当SELECT进入游戏时,它只选择一个(虚拟)表 - 即,各个表 后加入(JOIN),过滤(WHERE)等
如果您只想数一张桌子,那么您可以尝试几件事......
COUNT(DISTINCT table1.id)
或者将您想要计数的表转换为其中包含count()的子查询