You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:54