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);