Я хочу узнать количество Customer_ID:

Проблема 1: Ниже приведен код для подсчета количества Customer_ID. В моей базе данных 36 миллионов записей. Когда я ввожу приведенный ниже запрос, чтобы найти счетчик 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
Karthikeyan Raj 18 Июл 2017 в 12:54

2 ответа

36 миллионов строк не должны вызывать ошибку переполнения. Ты можешь попробовать:

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

Но в этом нет необходимости, потому что ваша таблица не должна приводить к переполнению (кроме случаев, когда «миллион» действительно означает «миллиард» в английском языке США).

Для повышения производительности вам может потребоваться индекс по Customers(Customer_ID). Похоже, что у вас это есть, если Customer_Id является первичным ключом таблицы. Конечно, если это первичный ключ, то счет всегда будет «1», поэтому в запросе нет необходимости.

0
Gordon Linoff 18 Июл 2017 в 14:48

У меня есть два следующих запроса, и я ожидаю, что первый запрос будет намного быстрее, но это не так. Почему?

Запрос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

Запрос2

SELECT Customer_ID, COUNT(*) AS [Count of Customer_ID]
FROM [Customers] WITH (NOLOCK)
GROUP BY Customer_ID
0
Luciano van der Veekens 19 Июл 2017 в 09:51