Sql 操作数数据类型varchar(max)对于avg运算符无效
有人能帮我解决这个错误吗Sql 操作数数据类型varchar(max)对于avg运算符无效,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,有人能帮我解决这个错误吗 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''
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, a.name, a.Report, b.AgentID
选择
a、 id,a.姓名,a.报告,b.代理,
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(b.持续时间分钟)
来自表1 a
a.id=b.agentid上的左联接表
哪里
StartChatTime>=“20200701”和
LastChatTimeChatDurationMinute列的数据类型似乎是varchar,所以需要对其进行转换
SELECT
a.id, a.name, 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, a.name, a.Report, b.AgentID
选择
a、 id,a.姓名,a.报告,b.代理,
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(铸造(b.ChatDurationMinute为浮动))
来自表1 a
a.id=b.agentid上的左联接表
哪里
StartChatTime>=“20200701”和
LastChatTime根据查询中的命名约定,假设StartChatTime
和LastChatTime
位于b
而不是a
,这是非常合理的。如果是这样,那么WHERE
子句将左连接
转换为内部连接
此外,将b.AgentId
包含在groupby
中是多余的,因为ON
子句指定它应该与a.id
相同
将数字存储在字符串中是一种糟糕的设计。但是,如果您被一个糟糕的设计所困扰,您可能应该使用try\uz()
函数之一
让我假设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.name, a.Report;
选择a.id、a.name、a.Report
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(尝试转换(整数,b.ChatDurationMinute)*1.0)
从表1到左联接
表b
在a.id=b.agentid和
b、 StartChatTime>=“20200701”和
b、 LastChatTime正确的解决方案是将数字存储在数字数据类型中…为什么要将数字存储在varchar
列中?你不应该这样做这和你之前的问题差不多。。。你已经得到了答案。。。关于将varchar转换为numeric以及处理由于使用不正确的数据类型而出现的问题,您还不了解什么?这是否回答了您的问题?我完成了转换为float,但得到如下错误:将数据类型varchar转换为float时出错。@NamedJustin这与前面的问题的原因相同,一些数据不会自然地转换为数字类型。如果需要进一步帮助,您需要发布一些示例数据。