多表字段条件断言:SQL聚合除数为0与公式合并处理咨询
解决方案
完整SQL实现
SELECT -- 需求1:合并双音节Formula为单音节,以此作为聚合维度 CASE WHEN p.Formula = '双音节甲' THEN '单音节甲' WHEN p.Formula = '双音节乙' THEN '单音节乙' -- 补充其他双音节到单音节的映射规则 ELSE p.Formula END AS Aggregated_Formula, p.Molecule, SUM(f.sales_amount) AS Total_Sales, -- 替换为实际需要统计的销售指标 -- 需求2:安全计算Product_units,避免除以0 CASE WHEN SUM(f.units) <> 0 THEN SUM(f.ext_units) / SUM(f.units) ELSE 0 END AS Product_units FROM Fact.Sales f JOIN DM_Product p ON f.product_id = p.product_id -- 替换为实际关联字段 WHERE p.Molecule = '目标分子' -- 替换为你指定的Molecule值 GROUP BY CASE WHEN p.Formula = '双音节甲' THEN '单音节甲' WHEN p.Formula = '双音节乙' THEN '单音节乙' ELSE p.Formula END, p.Molecule;
关键逻辑说明
- 双音节Formula聚合:通过
CASE WHEN定义双音节到单音节的映射规则,将属于同一单音节的不同双音节Formula归为同一分组。注意GROUP BY子句必须和SELECT中的Formula处理逻辑完全一致,否则会出现分组逻辑不匹配的错误。 - 除数为0处理:使用
CASE分支判断聚合后的SUM(f.units)是否不为0,仅在满足条件时执行除法运算,否则直接返回0。如果你的SQL方言支持NULLIF函数,也可以用COALESCE(SUM(f.ext_units)/NULLIF(SUM(f.units), 0), 0)实现相同效果,两种写法都能安全规避除数为0的异常。
内容的提问来源于stack exchange,提问作者bestmbaman
相关产品推荐
相关产品推荐

