首页 > 解决方案 > 如何划分两个聚合以获得百分比

问题描述

我正在尝试计算处理量与目标量的百分比。我已经能够分别计算出工作量和目标量,但是当我尝试获得百分比时,我的结果一直四舍五入到最接近的整数,我已经将它们转换为十进制,因为我期望结果以小数形式而不是百分比形式出现。

(CAST(COUNT(job_id) AS DECIMAL)/
(CAST(ROUND(SUM(review_time)/1000,2)/MAX(CAST(target_review_time AS DECIMAL)) AS DECIMAL))) AS Percentage

任何帮助将不胜感激,谢谢

标签: sqlcountsummaxpresto

解决方案


您正面临整数除法。该操作的所有操作数都是整数,因此结果也以整数形式给出。

您可以通过将操作数之一转换为小数来强制使用小数上下文:

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(*)


推荐阅读