首页 > 解决方案 > Ratio_to_report 与 round 函数

问题描述

我正在尝试计算数据中每个值的百分比贡献,并且还需要将百分比限制为小数点后 2 位。

以下是我构建的代码:

SELECT test , count(*)as Total , floor(ratio_to_report(Total)over () as Percentage)     
FROM [abc_table]  
where platform in ('A', 'B', 'C', 'D')
group by  test 
order by Percentage desc     

如果我删除下限,我会得到结果,即总数和百分比,但不能将百分比限制为 2 个小数点

标签: google-bigquery

解决方案


看起来您仍在使用旧版 SQL - 您可以在下面使用来解决您的问题

#legacySQL
SELECT test, Total, ROUND(Percentage, 2) AS Percentage
FROM (
  SELECT test, 
    COUNT(*) AS Total, 
    RATIO_TO_REPORT(Total) OVER() AS Percentage
  FROM [project:dataset.abc_table]
  WHERE platform IN ('A', 'B', 'C', 'D')
  GROUP BY  test 
)
ORDER BY Percentage DESC    

同时,强烈建议您迁移到 BigQuery 标准 SQL - 以下是您如何做到这一点

#standardSQL
SELECT DISTINCT test, 
  COUNT(1) OVER(PARTITION BY test) AS Total,
  ROUND(COUNT(1) OVER(PARTITION BY test) / COUNT(1) OVER(), 2) AS Percentage
FROM `project.dataset.abc_table`
WHERE platform IN ('A', 'B', 'C', 'D')
ORDER BY Percentage DESC  

推荐阅读