如何简化数据分组对比及占比计算的SQL实现?
简化后的SQL实现
当然有更巧妙的简化方式,用条件聚合就能替代原有的UNION+PIVOT逻辑,代码更紧凑,执行效率也更高(只需要一次生成数据集,而非两次生成后合并):
SELECT SUM(CASE WHEN level <=5 THEN level ELSE 0 END) AS LESS_THAN, SUM(CASE WHEN level >5 THEN level ELSE 0 END) AS GREATER_THAN, ROUND( SUM(CASE WHEN level <=5 THEN level ELSE 0 END) / SUM(level), 4 ) AS percentage FROM dual CONNECT BY level <=10;
简化思路说明
- 直接通过
CONNECT BY生成1到10的序列,无需拆分两次再合并 - 用
CASE语句配合SUM实现分组求和,替代PIVOT的列转行逻辑 - 占比计算直接用组内总和除以整体总和,避免重复计算
LESS_THAN+GREATER_THAN(两者之和就是所有level的总和)
内容的提问来源于stack exchange,提问作者Christian Bongiorno
相关产品推荐
相关产品推荐

