Вот эта таблица, по которой я сейчас пытаюсь сделать запрос. данные выглядят следующим образом:
--------------------------------
| Message_Time | User | Message|
--------------------------------
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User2 | msg-body
|y-m-d H:M:S |User2 | msg-body
Я пытаюсь выбрать пользователей и подсчитать количество сообщений, отправленных каждым отдельным пользователем.
Я пытался выбрать из этой базы данных и сделать отдельный столбец «Пользователь» и подсчитать столбец «Сообщение», но я продолжаю получать сообщение об ошибке. Я уверен, что я не подхожу к этому правильно.
Я попробовал следующий запрос:
SELECT DISTINCT(USER) AS [User_ID], COUNT(Message) AS [Messages_Sent]
FROM [dbo].[Table]
Это мой желаемый результат:
--------------------------
| User_ID | Messages_Sent|
--------------------------
|User1 | 3 |
|User2 | 2 |
Но, к сожалению, возникает следующая ошибка:
Operand data type ntext is invalid for count operator.
Любая помощь будет здорово, спасибо.
Тип данных (n)text устарел почти 15 лет назад в пользу (n)varchar(max).
@мальмонте. . . Синтаксис и вопрос похожи на SQL Server. Пожалуйста, отмечайте свои вопросы соответствующим образом.


используйте group by для агрегирования
SELECT USER AS [User_ID], COUNT(*) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER
это возвращает не нулевые строки
функция агрегации всегда возвращает отличный результат
SELECT USER AS [User_ID], COUNT(message) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER
это возвращает количество, где значение столбца не равно нулю
На самом деле это не остановит ошибку, которую получает OP, поскольку Message — это ntext.
count(column) возвращает количество незначащих значений в столбце. ошибка связана с отсутствующей группой
У вас был COUNT(Message) раньше, что было причиной ошибки, которую получал ОП.
ответ обновлен с обоими ... count (*) для ненулевых строк .. count (сообщение) не является нулевым значением null сообщения docs.microsoft.com/it-it/sql/t-sql/functions/…
Используйте GROUP BY и COUNT(*):
SELECT USER AS [User_ID], COUNT(*) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER;
Предположительно, Message никогда не бывает NULL, так что это делает то же самое.
Кстати, замените text на nvarchar(max) или varchar(max). text устарел. Как говорится в документация:
IMPORTANT! ntext, text, and image data types will be removed in a future version of SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.
Это сработало, большое спасибо. Я также внес изменения в теги, которые вы предложили. Спасибо еще раз.
Исправьте свой тип данных, и тогда ваш запрос будет работать нормально:
ALTER TABLE dbo.[Table] ALTER COLUMN Message nvarchar(MAX);
Как упоминалось в комментариях, ntext устарел уже много лет, давно пора прекратить его использовать и использовать правильный.
Это SQL Server или MySQL? Пожалуйста, будьте внимательны при выборе тегов.