

我们有两个新任务:任务3(删除无效数据)和任务4(多维度统计与占比计算)。需结合表结构逻辑设计SQL,确保数据操作安全且逻辑严谨。
id=4为例)表结构关联:order_detail的order_no是外键,关联order_header的order_no。需先定位无效记录,再删除。
逻辑解释:
NOT IN子查询找到order_header中不存在的order_no,再结合id=4条件定位到具体行删除。id=4),可简化为:
需求拆解:
收货店铺(gr_store_code)、商品编码(article_code)order_date BETWEEN '2022-01-01' AND '2022-03-01'SUM(od.order_qty))商品订单数量 / 店铺总订单数量实现步骤(窗口函数优化):
通过WITH子句先计算店铺总订单数量,再用窗口函数关联占比。
id=4限定删除范围,避免全表扫描风险;实际场景中需结合业务逻辑(如是否有外键约束)调整。WITH子句拆分“店铺总数量”和“商品分店铺数量”,通过JOIN关联后计算占比,既保证数据关联性,又避免重复聚合。ROUND(..., 2)保留两位小数,*1.0确保除法为浮点运算(避免整数除法截断)。若需简化任务4(不拆分子查询),也可通过关联子查询实现:
但此写法子查询重复执行,性能略逊于WITH子句,建议优先用窗口函数方案。
以上SQL覆盖任务3和任务4的核心逻辑,可根据实际数据库(如MySQL、PostgreSQL)的语法差异微调。
id=4 为例)需先通过 左连接 定位 order_detail 中无匹配 order_header 的记录,再执行删除。
需同时统计 店铺总订单量 和 各商品订单量,通过窗口函数或子查询计算占比。
任务3防误删:
LEFT JOIN + WHERE IS NULL 定位无匹配的记录,再通过 id=4 精准删除(避免误删有效数据)。id=4),可简化为:
任务4占比计算:
*1.0 将整数转为浮点数,避免 INT/INT 截断(如 5/2=2 而非 2.5)。SUM() OVER (PARTITION BY ...) 可高效跨行聚合,减少子查询嵌套。以上SQL可直接在支持窗口函数(如MySQL 8+、PostgreSQL)的数据库中运行,若使用旧版本(如MySQL 5.x),优先选择方法2(子查询)。