如何在Redshift或SQL中计算行值占对应列总合计的占比
Redshift 计算每日销售额占比实现方案
你可以直接使用Redshift支持的窗口函数实现需求,无需提前预计算总销售额再做表关联,同时过滤掉合计行即可:
基础实现代码
SELECT date, sales, ROUND(sales::FLOAT / SUM(sales) OVER (), 4) AS avg FROM 替换为你的实际表名 WHERE date != 'Grand total' -- 过滤合计行 ORDER BY date
注意说明
- 整数除法兼容:Redshift默认整数相除会截断返回整数,因此需要将
sales转为FLOAT类型,避免10/215直接返回0的问题 - 格式自定义:如果需要输出百分比格式,可将计算逻辑修改为以下写法,示例保留2位小数百分比:
ROUND((sales::FLOAT / SUM(sales) OVER ()) * 100, 2) || '%' AS avg - 动态合计行过滤:如果你的合计行是通过
ROLLUP/GROUPING SETS语法动态生成的,可将WHERE条件替换为WHERE GROUPING(date) = 0,过滤逻辑更稳定。
内容的提问来源于stack exchange,提问作者Scribbled Mind
相关产品推荐
相关产品推荐

