2014-07-16 34 views
3

我在SSRS中创建了一个表,其中包含第1列中的客户名称以及第2列中相应的订单数。此查询适用于我正在尝试完成的操作,但我不确切知道Count函数知道我希望它算什么,以及我希望它算什么桌子。有人可以向我解释这个,这样我可以更好地了解未来吗?万分感谢。有人可以解释Count在这个SQL查询中的工作原理吗?

SELECT Customers.name 
    ,Count(1) AS OrderCount 
FROM Customers 
INNER JOIN Orders 
    ON Customers.id = Orders.customer_id 
GROUP BY Customers.name 
+0

这应该真的被标记为mysql吗?如果您使用的是报告服务,则您更希望sql-server –

+1

此查询为每个唯一客户名称的每条记录(“1”可以是任何其他常量)计数。可能难以理解的是'记录'是如何定义的。请记住,SQL首先计算集合(相互连接的表),然后*项目*结果,以便它可以在select子句中使用。尽管会涉及5个表,“count”并不会产生异常并从此结果集计数“records”。 – Sebas

回答

6

我不知道究竟Count函数是如何知道我想要什么赫克它来计算

只有一两件事,COUNT能算 - 它可以指望其中表达式计算为非空值。如果在常规查询中使用COUNT(1),则每行都会得到1。但是,GROUP BYCOUNT将返回特定组中的行数。在你的情况下,这将是具有相同Customers.name的行数,因为这是你用于GROUP BY的行数。

至于传递1COUNT推移,一个比较普遍的做法,这些天是传递一个星号,即写COUNT(*),因为在大多数RDBMS引擎存在的,没有性能损失。

+1

它也可以计数非空列值。其数量可能与行数不同。 –

-3

它计算的结果的第一个字段的出现次数的数量设定

+0

这是不正确的。 –

2

计数计数true每个找到记录。因此,如果有3条记录,则计数为true 3次,并返回3。只要它存在或者是一个常数,它在那里计算的并不重要。如果存在,则进行计数。这是您分组时根据重要性分组的行数。

相关问题