MySQL中如何按同列不同变量计算并新增列值?
解决方法
你的问题出在两个核心点:
- 新列
new_yield设为INT类型,会直接丢弃原yield列的小数部分,导致精度丢失 UPDATE语句的CASE逻辑仅赋值固定数值(20/-10),没有和原yield字段执行预期的加减运算
正确操作步骤
- 添加匹配精度的新列
原yield是DECIMAL(5,2),加减操作后数值范围会扩大,建议新列使用DECIMAL(7,2)(足够容纳运算后的结果):
ALTER TABLE mydatabase.crop_yield ADD COLUMN new_yield DECIMAL(7, 2);
- 按变量类型执行运算并更新
在CASE语句中结合原yield字段完成加减操作:
UPDATE mydatabase.crop_yield SET new_yield = CASE WHEN variable = 'Control' THEN yield + 20 WHEN variable = 'Treatment' THEN yield - 10 ELSE yield -- 若存在其他未知变量,保留原始值,可按需调整 END;
验证结果
执行查询确认运算效果:
SELECT id, replicate, variable, yield, new_yield FROM mydatabase.crop_yield;
此时Control组的new_yield为原yield加20,Treatment组为原yield减10,且小数精度完全保留。
内容的提问来源于stack exchange,提问作者J.K Kim
相关产品推荐
相关产品推荐

