Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用distinct和count函数获取不同的用户和发送的邮件数_Sql_Sql Server - Fatal编程技术网

Sql 如何使用distinct和count函数获取不同的用户和发送的邮件数

Sql 如何使用distinct和count函数获取不同的用户和发送的邮件数,sql,sql-server,Sql,Sql Server,有一个表,我目前正试图对其进行查询。数据如下所示: -------------------------------- | 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 | ms

有一个表,我目前正试图对其进行查询。数据如下所示:

--------------------------------
| 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
我正在尝试选择用户并计算每个用户发送的邮件数量

我试图从这个数据库中进行选择,并在用户列上执行distinct操作,在消息列上进行计数,但我一直收到一个错误。我肯定我没有以正确的方式接近它

我尝试了以下查询:

SELECT DISTINCT(USER) AS [User_ID], COUNT(Message) AS [Messages_Sent] 
FROM [dbo].[Table]
这是我想要的输出:

--------------------------
| User_ID | Messages_Sent|
--------------------------
|User1    |       3      | 
|User2    |       2      | 
但不幸的是,这是发生的错误:

操作数数据类型ntext对于计数运算符无效。


任何帮助都会很好,谢谢。

使用分组方式进行聚合

SELECT USER AS [User_ID], COUNT(*) AS [Messages_Sent] 
FROM [dbo].[Table]
GROUP BY USER 
此返回值不能为空行

aggregation函数总是返回不同的结果

SELECT USER AS [User_ID], COUNT(message) AS [Messages_Sent] 
FROM [dbo].[Table]
GROUP BY USER 

这将返回列值不为null的计数

使用
分组依据
计数(*)

据推测,
消息
永远不会为
,因此这也做了同样的事情

顺便说一下,将
text
替换为
nvarchar(max)
varchar(max)
<不推荐使用代码>文本。作为缔约国:

重要!在SQL Server的未来版本中,将删除ntext、text和image数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)


修复数据类型后,查询将正常工作:

ALTER TABLE dbo.[Table] ALTER COLUMN Message nvarchar(MAX);

正如评论中提到的,ntext已经被弃用多年,现在是停止使用它并使用正确的版本的时候了。

这是SQL Server还是MySQL?选择标记时请小心。(n)文本数据类型已被弃用近15年,取而代之的是(n)varchar(max)。@malmonte。语法和问题看起来像SQL Server。请适当标记您的问题。这实际上不会停止OP收到的错误,因为
消息
是一个
ntext
。count(column)返回列中not值的数目。错误与您之前的
count(Message)
在缺少的组中相关,这就是OP收到错误的原因。答案已更新为两个。。。计数(*)用于非空行。。计数(消息)不是空的消息值这工作,非常感谢。我还对您建议的标签进行了更改。再次感谢。
ALTER TABLE dbo.[Table] ALTER COLUMN Message nvarchar(MAX);