【问题标题】:How to divide two aggregates to get a percentage如何划分两个聚合以获得百分比
【发布时间】:2020-11-16 23:16:35
【问题描述】:
我正在尝试计算处理量与目标量的百分比。我已经能够分别计算出工作量和目标量,但是当我尝试获得百分比时,我的结果一直四舍五入到最接近的整数,我已经将它们转换为十进制,因为我期望结果以小数而不是百分比形式出现。
(CAST(COUNT(job_id) AS DECIMAL)/
(CAST(ROUND(SUM(review_time)/1000,2)/MAX(CAST(target_review_time AS DECIMAL)) AS DECIMAL))) AS Percentage
任何帮助将不胜感激,谢谢
【问题讨论】:
标签:
sql
count
sum
max
presto
【解决方案1】:
您正面临整数除法。运算的所有操作数都是整数,因此结果也以整数形式给出。
您可以通过将其中一个操作数转换为小数来强制使用小数上下文:
COUNT(job_id) / SUM(review_time) / MAX(target_review_time) / 1000.0 AS Percentage
然后您可以round() 将结果设置为您想要的精度:
ROUND(COUNT(job_id) / SUM(review_time) / MAX(target_review_time) / 1000.0, 2) AS Percentage
注意:如果job_id 不可为空,则COUNT(job_id) 更有效地写入COUNT(*)。
【解决方案2】:
这基本上是你想要的吗?
COUNT(*) * 1.0 / ( (SUM(Review_Time) / 1000.0) / MAX(target_review_time) )
如果是这样,则对整个表达式进行强制转换和舍入。