如何在SQL中计算每行数据占总数的百分比?
解决SQL计算行占比的问题
你的需求是计算每行cnt占总cnt的百分比,之前的语句问题在于普通聚合函数sum(cnt)会将结果集合并成一行,无法保留原表的每行数据。需要使用窗口函数来获取全局的总cnt值,而非普通聚合。
正确SQL语句
SELECT Survived, cnt, ROUND(100 * (cnt / SUM(cnt) OVER ()), 2) AS percentage FROM survivalCnt;
语句说明
SUM(cnt) OVER ():窗口函数OVER()不带任何分区条件,会计算整个表的cnt总和(即549+342=891),并且为每行返回这个总和值。- 后续计算
cnt / 总和再乘以100,用ROUND()保留两位小数,就能得到每行的占比。
执行结果
| Survived | cnt | percentage |
|---|---|---|
| No | 549 | 61.62 |
| Yes | 342 | 38.38 |
内容的提问来源于stack exchange,提问作者Vinita
相关产品推荐
相关产品推荐

