2014-07-16 54 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。只要它存在或者是一個常數,它在那裏計算的並不重要。如果存在,則進行計數。這是您分組時根據重要性分組的行數。

相關問題