如何在BigQuery中将重量向上取整为0.5KG的倍数?
如何在BigQuery中实现重量向上取整为0.5KG的倍数
要实现把重量值向上取整到最近的0.5KG倍数(比如0.4→0.5,2.1→2.5),最简洁可靠的方法是利用BigQuery的CEIL(向上取整)函数,通过以下公式实现:
CEIL(WKG.Weight_KG * 2) / 2
为什么这个公式有效?
核心思路是把重量值放大2倍,让0.5KG的整数倍转化为整数,再通过向上取整后还原:
- 比如0.4KG ×2 = 0.8,
CEIL(0.8)会取大于等于0.8的最小整数,也就是1 - 再把结果除以2:1 ÷2 =0.5,正好匹配你的需求
- 再看2.1KG:2.1×2=4.2,
CEIL(4.2)=5,5÷2=2.5,完美符合示例要求
你之前尝试的问题分析
第一个语句返回布尔值:
你写的WHEN WKG.Weight_KG<=0.5 THEN WKG.Weight_KG=0.5是错误的——在CASE表达式里,你应该直接返回目标值0.5,而不是写赋值语句(=0.5会返回布尔值true/false)。即使修正为返回0.5,这种方式也只能处理0.5以下的数值,无法覆盖所有重量区间,远不如通用公式高效。第二个语句出现0.0的问题:
ROUND(WKG.Weight_KG / .5,0) * .5用了ROUND(四舍五入),而非向上取整。比如当重量是0.2KG时,0.2/0.5=0.4,ROUND(0.4,0)=0,最终得到0.0,这不符合你“向上取整”的要求。而CEIL会严格取大于等于目标值的最小整数,不会出现这种情况。
完整示例代码
假设你的表名为your_weight_table,可以这样写查询:
SELECT Weight_KG, CEIL(Weight_KG * 2) / 2 AS rounded_up_weight_to_0.5kg FROM your_weight_table WKG
测试几个典型值:
| Weight_KG | rounded_up_weight_to_0.5kg |
|---|---|
| 0.4 | 0.5 |
| 2.1 | 2.5 |
| 0.2 | 0.5 |
| 2.5 | 2.5 |
| 2.6 | 3.0 |
所有结果都符合你“哪怕超出50克或100克也向上取整到下一区间”的要求。
内容的提问来源于stack exchange,提问作者Mayuresh Rane
相关产品推荐
相关产品推荐

