如何使用IF语句替换SQL中WITH ROLLUP汇总结果的NULL值
修正后实现方案
现有代码问题
- 未关联category表,无法获取category_name字段
- 仅按product_name分组,无法生成分类维度的汇总行
- 聚合逻辑错误:现有代码计算的是商品总销售额,题目要求返回总购买数量
- 未实现ROLLUP生成的NULL值替换逻辑
完整可运行代码
SELECT -- 替换分类维度的NULL:如果是汇总行就显示"所有分类总计",否则显示原分类名 IF(GROUPING(c.category_name) = 1, '所有分类总计', c.category_name) AS category_name, -- 替换产品维度的NULL:分类汇总行显示"当前分类产品合计",全局汇总行显示"全局总合计" IF(GROUPING(p.product_name) = 1, IF(GROUPING(c.category_name) = 1, '全局总合计', '当前分类产品合计'), p.product_name) AS product_name, -- 统计总购买数量 SUM(ori.quantity) AS Total_quantity_purchased FROM category c -- 关联分类表和产品表,获取分类名称 INNER JOIN products p ON c.category_id = p.category_id INNER JOIN order_items ori ON p.product_id = ori.product_id -- 先按分类、再按产品分组,配合ROLLUP生成分类汇总、全局汇总 GROUP BY c.category_name, p.product_name WITH ROLLUP
逻辑说明
GROUPING(字段)函数会对WITH ROLLUP生成的汇总行对应字段返回1,普通业务行返回0,配合IF函数即可精准替换NULL值- 分组顺序为分类→产品,WITH ROLLUP会自动生成三层结果:单产品统计行、对应分类的所有产品汇总行、全部分类的全局汇总行
- 关联逻辑覆盖了题目要求的三张表,返回字段完全符合需求
内容的提问来源于stack exchange,提问作者CoffeeEthusiast
相关产品推荐
相关产品推荐

