2017-07-18 121 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”,因此查询是不必要的。