SQL查询查找特定字段的计数(Customer_ID)

时间:2017-07-18 09:54:35

标签: sql ms-access sql-server-2016

我想找出Customer_ID的数量:

问题1:以下是查找Customer_ID计数的代码。 我的数据库中有3600万条记录。当我输入以下查询以查找Customer_ID的计数时,它需要花费太长时间才能运行,最后我收到错误消息。

  

[Microsoft] SQL Server Native Client 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

请帮我实现这个结果。感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

3600万行不应该导致溢出错误。你可以尝试:

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

但这不应该是必要的,因为你的桌子不应该导致溢出(除非“百万”在美国英语中真的意味着“十亿”)。

为了提高性能,您可能需要Customers(Customer_ID)上的索引。如果Customer_Id是表的主键,那么您似乎可以拥有它。当然,如果它是主键,那么计数将始终为“1”,因此查询是不必要的。