SQLite中如何计算各国籍value_eur占总value_eur的比例
原SQL报错原因
- CTE中
sum(value_eur)聚合计算结果未设置别名,外层查询直接引用value_eur字段会触发字段不存在的报错 - 占比计算逻辑错误:窗口函数添加了
partition by nationality分区规则,由于CTE已经完成按国籍聚合、每个国籍仅返回1行数据,分区后每个分区的总和就是当前国籍自身的汇总值,计算出的比例恒为1,无法得到占全表总价值的百分比
修正后可运行SQL
WITH CTE AS ( SELECT nationality, SUM(value_eur) AS nation_total_value FROM Fifadf GROUP BY nationality ) SELECT nationality, nation_total_value AS value_eur, ROUND(1.0 * nation_total_value / SUM(nation_total_value) OVER (), 4) AS prop FROM CTE
若需要直接返回百分比格式,可以把prop字段的计算逻辑调整为
CONCAT(ROUND(100.0 * nation_total_value / SUM(nation_total_value) OVER (), 2), '%')
样例数据校验
按照给出的测试数据计算:
全表总value_eur总和为1000+2000+2000+3000+3000=11000,运行修正后SQL返回结果如下:
- n1:汇总value_eur为3000,占比27.27%
- n2:汇总value_eur为2000,占比18.18%
- n3:汇总value_eur为6000,占比54.54%
和期望输出完全一致。
内容的提问来源于stack exchange,提问作者Kaffo
相关产品推荐
相关产品推荐

