使用SQL的partition与join语句计算各组织FinanceClassification占比
按组织统计各财务分类占比SQL实现
基础说明
- 计算规则:统计每个组织下各财务分类的金额占该组织总金额的百分比,结果保留2位小数
- 示例计算逻辑:
组织1 PRO占比 = 14/22.5*100 = 62.22% 组织1 SFC占比 = 8.5/22.5*100 = 37.78% 组织2 PRO占比 = 84/126*100 = 66.67% 组织2 SFC占比 = 42/126*100 = 33.33%
- 实现约束:仅使用SQL的
PARTITION和JOIN语句,不可使用CTE
实现方案
前提假设
原始数据表名为finance_data,核心字段如下:
organization_id:组织唯一标识finance_classification:财务分类编码/名称amount:对应财务分类的金额数值
最终SQL
SELECT t1.organization_id, t1.finance_classification, t1.amount, ROUND(t1.amount / t2.org_total_amount * 100, 2) AS percentage FROM finance_data t1 INNER JOIN ( SELECT DISTINCT organization_id, SUM(amount) OVER (PARTITION BY organization_id) AS org_total_amount FROM finance_data ) t2 ON t1.organization_id = t2.organization_id
逻辑说明
- 内层子查询使用
PARTITION BY organization_id按组织分组计算每个组织的总金额,搭配DISTINCT去重后得到「组织ID-组织总金额」的映射表 - 外层将原始数据表和总金额映射表通过组织ID关联,用每行分类金额除以对应组织总金额再乘以100,保留两位小数得到最终占比
内容的提问来源于stack exchange,提问作者Katlego
相关产品推荐
相关产品推荐

