SQL作业求助:如何将GME类别零件的order_line表num_ordered字段提升20%
搞定你的数据库作业更新问题
嘿,我来帮你解决这个卡住的数据库作业题!我看你已经理清了核心要点:要关联order_line和item两张表,用UPDATE语句,还要把num_ordered提升20%后取整。不过我发现你没说清楚是否要针对特定分类的商品来更新?我分两种常见情况给你方案:
情况1:更新所有关联商品的订单记录
如果不管商品分类,只要是order_line里和item表有对应关系的记录,都要更新num_ordered,不同数据库的写法略有区别,给你主流的两种:
MySQL/MariaDB 写法
UPDATE order_line ol JOIN item i ON ol.item_id = i.item_id -- 这里假设两张表靠item_id关联,记得换成你实际的关联字段哦 SET ol.num_ordered = ROUND(ol.num_ordered * 1.20, 0);
PostgreSQL 写法
PostgreSQL用FROM子句来关联表:
UPDATE order_line ol SET num_ordered = ROUND(ol.num_ordered * 1.20, 0) FROM item i WHERE ol.item_id = i.item_id;
情况2:只更新特定分类的商品订单
如果你需要只处理某个(或某些)分类的商品对应的订单记录,只要加个分类过滤条件就行:
MySQL/MariaDB 示例
UPDATE order_line ol JOIN item i ON ol.item_id = i.item_id SET ol.num_ordered = ROUND(ol.num_ordered * 1.20, 0) WHERE i.category = '电子产品'; -- 把这里换成你要指定的分类值
PostgreSQL 示例
UPDATE order_line ol SET num_ordered = ROUND(ol.num_ordered * 1.20, 0) FROM item i WHERE ol.item_id = i.item_id AND i.category = '电子产品';
关于你提到的SUM()函数的小提醒
你说要用round(sum(num_ordered * 1.20)),0,但SUM()是用来做求和统计的(比如算某个分类的总订购量),而咱们现在是要给每条订单明细的num_ordered单独提升20%,所以直接用ROUND(ol.num_ordered * 1.20, 0)就够了——它会把单条记录的数值乘1.2后四舍五入成整数。要是你需要的是向上取整(不管小数多少都进一位),那应该用CEILING()函数,比如CEILING(ol.num_ordered * 1.20),你可以根据作业要求调整。
如果你的需求其实是基于聚合后的结果来更新(比如把某个分类的总订购量按比例分配更新?),可以再补充说明具体场景,我再帮你调整语句~
内容的提问来源于stack exchange,提问作者J.Speer
相关产品推荐
相关产品推荐

