我想找出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
请帮我实现这个结果。感谢您的帮助。
答案 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”,因此查询是不必要的。