google-bigquery - 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 个小数点
解决方案
看起来您仍在使用旧版 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
推荐阅读
- android - sdkmanager 安装 cmake 失败
- css - 在溢出隐藏祖父母之外显示定位的 div
- python - 没有连接到 BLE 设备?使用黯淡:“AttributeError:'NoneType'对象没有属性'ConnectionStatusChanged'”
- r - 使用r中的简单特征(SF)通过属性有效结合特征?
- docker - net core docker compose 确实注册文件更改
- google-cloud-bigtable - Google Bigtable - 如何存储数据以便能够按国家、城市和日期查询?
- c# - 使用 FileHelperAsyncEngine 读取、修改和写入
- javascript - 以编程方式确定值是否在一个范围内,给定 N 个范围
- flutter - 生成嵌套在垂直列表视图中的动态高度水平列表视图
- javascript - 带有标记且没有溢出的 Svg