BigQuery查询中如何将AVG结果保留两位小数?
解决BigQuery中AVG结果保留两位小数的问题
你遇到的问题是因为单纯使用CAST()而未指定数值精度和小数位数,或者没有使用专门的舍入函数。以下是两种可靠的解决方式:
方法1:使用ROUND函数(推荐,直接舍入到指定小数位)
ROUND()函数会将计算结果四舍五入到你指定的小数位数,语法简单且直观:
SELECT Id, ROUND(AVG(VeryActiveMinutes), 2) AS avg_very_active, SUM(VeryActiveMinutes) AS total_very_active, SUM(SedentaryMinutes) AS total_sedentary FROM `fit-mantra-410702.fitbit_data.dailyactivity` GROUP BY Id ORDER BY avg_very_active DESC
这里的2代表保留两位小数,结果会自动进行四舍五入(比如87.333333333333329会变成87.33)。
方法2:使用CAST指定数值精度
如果需要将结果以固定精度的数值类型存储(而非浮点型),可以用CAST()配合NUMERIC(p,s)类型,其中p是总位数,s是小数位数:
SELECT Id, CAST(AVG(VeryActiveMinutes) AS NUMERIC(10,2)) AS avg_very_active, SUM(VeryActiveMinutes) AS total_very_active, SUM(SedentaryMinutes) AS total_sedentary FROM `fit-mantra-410702.fitbit_data.dailyactivity` GROUP BY Id ORDER BY avg_very_active DESC
这种方式会将结果转换为NUMERIC类型,强制保留两位小数,超出部分自动四舍五入,适合需要精准数值存储的场景。
为什么你之前的CAST尝试失败?
如果只是使用CAST(AVG(VeryActiveMinutes) AS NUMERIC)或CAST(AVG(VeryActiveMinutes) AS FLOAT64),BigQuery不会自动截断小数位——你必须明确指定小数位数(如NUMERIC(10,2)),才能得到两位小数的结果。
内容的提问来源于stack exchange,提问作者Kasey Wilson
相关产品推荐
相关产品推荐

