如何解决操作数数据类型varcharmax对avg运算符无效
有人可以帮助我解决这个错误吗?
SELECT
a.id,a.name,a.Report,b.Agentid,count(distinct b.pyID),count(distinct b.SourceID),AVG(b.ChatDurationMinute)
from table_1 a
left join table_b b on a.id = b.agentid
where
StartChatTime >= ''20200701'' and
LastChatTime <= ''20200831''
GROUP BY a.id,b.AgentID
并得到这样的错误:
操作数数据类型varchar(max)对avg运算符无效。
我该怎么办?感谢任何帮助我的人。
解决方法
根据查询中的命名约定,假设StartChatTime
和LastChatTime
位于b
中而不是a
中是非常合理的。如果是这样,则WHERE
子句会将LEFT JOIN
变成INNER JOIN
。
此外,在b.AgentId
中包含GROUP BY
是多余的,因为ON
子句指定它应该与a.id
相同。
将数字存储在字符串中是一种糟糕的设计。但是,如果您遇到糟糕的设计,应该使用try_()
函数之一。
让我假设ChatDurationMinute
是一个整数。然后:
SELECT a.id,a.name,a.Report
COUNT(DISTINCT b.pyID),COUNT(DISTINCT b.SourceID),AVG(TRY_CONVERT(int,b.ChatDurationMinute) * 1.0)
FROM table_1 a LEFT JOIN
table_b b
ON a.id = b.agentid AND
b.StartChatTime >= '20200701'' AND
b.LastChatTime <= '20200831'
GROUP BY a.id,a.Report;
如果这些日期确实在a
中,则可以将其保留在WHERE
子句中。
ChatDurationMinute列的数据类型似乎是varchar-因此您需要对其进行转换
SELECT
a.id,a.Report,b.Agentid,count(distinct b.pyID),count(distinct b.SourceID),AVG(cast(b.ChatDurationMinute as float))
from table_1 a
left join table_b b on a.id = b.agentid
where
StartChatTime >= ''20200701'' and
LastChatTime <= ''20200831''
GROUP BY a.id,b.AgentID
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。