2017-07-18 120 views
0

的計數:SQL查詢來找到我想要找出CUSTOMER_ID的計數特定領域(CUSTOMER_ID)

Issue1:下面是找到Customer_ID計數的代碼。 我的數據庫中有3600萬條記錄。當我輸入以下查詢來查找Customer_ID的計數時,運行花費的時間太長,最後我得到錯誤消息。

[微軟] SQL Server本機客戶端11.0,SQL Server的算術 溢出錯誤將表達式轉換爲數據類型爲int(8115)

我的查詢找到CUSTOMER_ID的計數:

SELECT Customer_ID,Count(*) 
FROM [Customers] 
GROUP BY Customer_ID; 

輸入數據庫:

S.no Customer_ID Country 

1.  456   INDIA 
2.  789   USA 
3.  1001   UK 
4.  456   AUSTRALIA 
5.  456   SINGAPORE 
6.  789   MALASIYA 
7.  1001   TAIWAN 
8.  1001   JAPAN 
9.  1001   AFRICA 
10.  1001   OMAN 
11.  123   DUBAI 

預期輸出:

Customer_ID  Count of Customer_ID 
     123    1 
     456    3 
     789    2 
     1001    5 

請幫我實現這個結果。感謝您的幫助提前。

回答

0

我有以下兩個查詢,我期望第一個查詢要快得多,但事實並非如此。爲什麼?

查詢1

SELECT Customer_ID, SUM(st.row_count) AS [Count of Customer_ID] 
FROM sys.dm_db_partition_stats st 
WHERE object_name(object_id) = 'Customers' 
GROUP BY Customer_ID 

QUERY2

SELECT Customer_ID, COUNT(*) AS [Count of Customer_ID] 
FROM [Customers] WITH (NOLOCK) 
GROUP BY Customer_ID 
0

3600萬行不應該造成溢出錯誤。你可以試試:

SELECT Customer_ID, Count_Big(*) 
FROM [Customers] 
GROUP BY Customer_ID; 

但是因爲你的表不應溢出結果不應該是必要的(除非「百萬」的真正含義在美國英語「十億」)。

對於性能,您可能需要Customers(Customer_ID)上的索引。如果Customer_Id是表格的主鍵,那麼看起來您可能會這樣做。當然,如果它是主鍵,則計數將始終爲「1」,因此查詢是不必要的。