如何在SQL中按population分组计算各分组内的hired占比百分比
解决方案
你只需要给窗口函数添加 partition by population 分区规则,让求和逻辑按地区分组计算即可,修改后的语句如下:
select round(count(hired) * 1.0 / sum(count(population)) over(partition by population), 2) as freq, hired, population from hr group by hired, population order by population, hired DESC;
修改说明
- 原语句
over()没有指定分区规则,会对全表所有分组的计数求和,所以得到的是全表总条数 - 修改为
over(partition by population)后,会分别对US、EU两个分组内部的计数求和,得到对应地区的总数据量 - 额外增加的
*1.0是为了避免部分数据库中整数除法自动截断小数位的问题,如果你用的数据库本身支持浮点除法可以省略
使用你提供的示例数据执行上述语句,输出结果和你给出的预期一致。
内容的提问来源于stack exchange,提问作者dnice123
相关产品推荐
相关产品推荐

