我想etr%。 etr%find的逻辑是减法(request_Date-xetr),如果它是getter然后etr然后是1,否则为0.我想用我的代码计算组中的成功%
错误行:COUNT((TIMESTAMPDIFF(MINUTE,Request_Date,Xetr)< etr然后1其他0结束时的情况)* 100 / count(1))as etr
答案 0 :(得分:0)
您应该使用SUM而不是COUNT:
SUM(case when TIMESTAMPDIFF(MINUTE,Request_Date, Xetr) < etr then 1 else 0 end)*100/count(1) as etr
答案 1 :(得分:0)
假设request_date
和xetr
是DATETIME数据类型,而etr
是TIME数据类型......
我们可以在两个DATETIME值之间获得分钟的差异,然后与从TIME数据类型派生的分钟的数量进行比较。 (我们需要进行转换,因为将整数与TIME数据类型进行比较不太可能产生我们想要的结果。)
使用MySQL ADDTIME
函数要简单得多。我们可以将etr
(TIME数据类型,一段时间)添加到request_date
(DATETIME),以返回DATETIME。我们可以轻松地将其与xetr
(另一个DATETIME)进行比较。
例如:
ADDTIME( request_date , etr ) > xetr
在将它们合并到聚合函数之前,我们应该测试并验证结果。将条件测试放入表达式中,我们得到:
COUNT(CASE ADDTIME(request_date,etr) > xetr THEN 1 END)/COUNT(1)*100 AS etr
parens看起来很奇怪,似乎不合法。目前还不完全清楚你想要实现的目标,但我怀疑你正在寻找这样的结果:
COUNT( CASE
WHEN TIMESTAMPDIFF(MINUTE,request_date,xetr) < etr
THEN 1
ELSE NULL
END
) * 100 / COUNT(1) AS etr
另请注意,ELSE 0
已替换为ELSE NULL
。使用零而不是NULL,CASE返回的值保证为非NULL,因此每行将被计数,整个表达式的值将为100或0.将NULL替换为0似乎它会更接近你想要达到的目标。
这只是猜测。