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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:02