是否有可能getter然后运算符在mysql中使用?

时间:2017-03-03 05:21:22

标签: mysql sql database database-design

我想etr%。 etr%find的逻辑是减法(request_Date-xetr),如果它是getter然后etr然后是1,否则为0.我想用我的代码计算组中的成功%

错误行:COUNT((TIMESTAMPDIFF(MINUTE,Request_Date,Xetr)< etr然后1其他0结束时的情况)* 100 / count(1))as etr

2 个答案:

答案 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_datexetr是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似乎它会更接近你想要达到的目标。

这只是猜测。