在PostgreSQL中计算各行政区城镇人口占总人口的百分比
计算PostgreSQL中各行政区城镇人口占比的解决方案
嘿,刚好能帮你搞定这个统计需求!首先我得先明确下——你提到的settlement表第三列应该是人口数值吧?我暂且把它命名为population,如果实际列名不一样,你替换成真实名称就行。
核心思路
我们需要按行政区分组,先算出每个行政区的总人口,再统计该行政区内属于「城镇类」的人口总和(这里我默认把City、Town、Suburb归为城镇类型,如果你有不同的划分标准,直接调整筛选条件就行),最后用城镇人口除以总人口,再转成百分比格式。
完整SQL语句
SELECT 行政区列名 AS 行政区, ROUND( (SUM(population) FILTER (WHERE 聚居地类型列名 IN ('City', 'Town', 'Suburb'))::NUMERIC / NULLIF(SUM(population), 0)) * 100, 1 ) AS 城镇人口占比(%) FROM settlement GROUP BY 行政区列名 ORDER BY 行政区列名;
语句说明
FILTER (WHERE ...):专门筛选出城镇类型的人口总和,比CASE表达式更简洁直观NULLIF(SUM(population), 0):避免出现总人口为0时的除以0错误,这种情况会返回NULLROUND(..., 1):把百分比保留1位小数,你可以根据需求调整位数ORDER BY:让结果按行政区顺序排列,方便查看
示例输出
| 行政区 | 城镇人口占比(%) |
|---|---|
| A | 62.3 |
| B | 75.8 |
| C | 41.5 |
| ... | ... |
如果你的聚居地类型划分标准不同(比如要把Town排除在外),只需要修改IN ('City', 'Town', 'Suburb')里的取值就行,非常灵活。
内容的提问来源于stack exchange,提问作者morteza
相关产品推荐
相关产品推荐

