如何在SQL中用ROUND函数保留Small_Bags_Percent的1位小数
解决SQL中ROUND函数保留小数的问题
你之前的写法错误在于不能在同一层SELECT的ROUND函数里直接引用列别名,SQL的执行顺序决定了列别名要在SELECT子句的表达式计算完成后才生效,所以别名无法被同一层的函数调用。
最简单的修正方式
直接把计算百分比的整个表达式作为ROUND函数的第一个参数,指定保留1位小数(第二个参数传1即可):
SELECT Date, Region, Total_Bags, Small_Bags, ROUND((Small_Bags / Total_Bags) * 100, 1) AS Small_Bags_Percent FROM `shaped-fx-370703.avocado_data.avocado_prices` WHERE Total_Bags <> 0
更清晰的拆分写法(适合复杂计算)
如果后续有更复杂的逻辑,可以用CTE(公共表表达式)先计算出原始百分比,再对结果应用ROUND函数,提升代码可读性:
WITH AvocadoBagStats AS ( SELECT Date, Region, Total_Bags, Small_Bags, (Small_Bags / Total_Bags) * 100 AS Small_Bags_Percent FROM `shaped-fx-370703.avocado_data.avocado_prices` WHERE Total_Bags <> 0 ) SELECT Date, Region, Total_Bags, Small_Bags, ROUND(Small_Bags_Percent, 1) AS Small_Bags_Percent FROM AvocadoBagStats
内容的提问来源于stack exchange,提问作者G. R.
相关产品推荐
相关产品推荐

