请求:将销量减去RMA退货量并生成格式化结果(附SQL语句)
解决方案:计算产品净销量(销量减去退货量)
可以通过子查询+LEFT JOIN的方式将销量数据和退货数据关联,同时处理无退货记录的产品(避免NULL值影响计算),最终得到每个产品的净销量(销量-退货量)。以下是整合后的SQL语句:
SELECT s.PRODUCT_SKU, s.PRODUCT_DESCRIPTION, s.PRODUCT_SALES_NUMBER, COALESCE(r.RETURNED_AMOUNT, 0) AS RETURNED_AMOUNT, (s.PRODUCT_SALES_NUMBER - COALESCE(r.RETURNED_AMOUNT, 0)) AS NET_SALES_NUMBER FROM ( -- 原销量查询作为子查询 SELECT COUNT(*) AS PRODUCT_SALES_NUMBER, Orders.SKU AS PRODUCT_SKU, Orders.Description AS PRODUCT_DESCRIPTION FROM Orders GROUP BY PRODUCT_SKU ) s LEFT JOIN ( -- 原RMA退货查询作为子查询 SELECT COUNT(*) AS RETURNED_AMOUNT, Orders.SKU AS PRODUCT_SKU, Orders.Description AS PRODUCT_DESCRIPTION FROM Orders INNER JOIN RMA ON Orders.OrderID = RMA.OrderID WHERE UPPER(Status) = "COMPLETE" GROUP BY PRODUCT_SKU ) r ON s.PRODUCT_SKU = r.PRODUCT_SKU ORDER BY NET_SALES_NUMBER DESC LIMIT 9;
关键说明:
- LEFT JOIN:确保所有有销量记录的产品都能被纳入统计,哪怕该产品没有退货记录(此时退货量会被处理为0)。
- COALESCE函数:将无退货时出现的NULL值转换为0,避免减法运算得到NULL结果。
- 排序与限制:最终按净销量降序排列,保留前9条数据,和原查询的逻辑一致。
如果仅需统计有退货记录的产品,可将LEFT JOIN改为INNER JOIN,但这样会过滤掉无退货的产品。
内容的提问来源于stack exchange,提问作者gary.noyb
相关产品推荐
相关产品推荐

