SQL-запрос для определения количества определенных полей (Customer_ID)
Я хочу узнать количество Customer_ID:
Проблема 1: Ниже приведен код для определения количества Customer_ID
, У меня есть 36 миллионов записей в моей базе данных. Когда я ввожу следующий запрос, чтобы найти количество Customer_ID
, это занимает слишком много времени для запуска и, наконец, я получаю сообщение об ошибке ниже.
[Microsoft] Собственный клиент 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
Пожалуйста, помогите мне достичь этого результата. Заранее благодарны за Вашу помощь.
2 ответа
У меня есть следующие два запроса, и я ожидаю, что первый запрос будет намного быстрее, но это не так. Зачем?
Query1
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
36 миллионов строк не должны вызывать ошибку переполнения. Ты можешь попробовать:
SELECT Customer_ID, Count_Big(*)
FROM [Customers]
GROUP BY Customer_ID;
Но это не должно быть необходимым, потому что ваша таблица не должна приводить к переполнению (если только "миллион" не означает "миллиард" в американском английском).
Для производительности, вы можете захотеть индекс на Customers(Customer_ID)
, Кажется вероятным, что у вас это есть, если Customer_Id
является первичным ключом таблицы. Конечно, если это первичный ключ, то счетчик всегда будет равен "1", поэтому запрос не нужен.