如何编写PostgreSQL统计女性怀孕次数分布的查询?
PostgreSQL查询:统计不同怀孕次数的女性人数
需求说明
需要统计不同怀孕次数对应的女性人数,计算逻辑如下:
- 最多统计3次怀孕
baby_dob1/baby_dob2/baby_dob3分别代表第1/2/3个已出生婴儿的出生日期,非空则计1次已完成的怀孕Pregnant字段为True表示当前处于怀孕状态(胎儿未出生),计1次怀孕- 最终怀孕次数为「已出生婴儿数 + 当前怀孕状态(1或0)」,但上限为3
示例计算
- Helen:3个非空的
baby_dob,Pregnant为False → 3次 - Laura:0个非空
baby_dob,Pregnant为True → 1次 - Mary:2个非空
baby_dob,Pregnant为True → 2+1=3次(触达上限)
对应的PostgreSQL查询语句
SELECT pregnancy_count AS "Category of pregnancies", COUNT(*) AS "Number of women" FROM ( SELECT LEAST( -- 统计已出生婴儿数量:非空的baby_dob字段数 (CASE WHEN baby_dob1 IS NOT NULL THEN 1 ELSE 0 END) + (CASE WHEN baby_dob2 IS NOT NULL THEN 1 ELSE 0 END) + (CASE WHEN baby_dob3 IS NOT NULL THEN 1 ELSE 0 END) + -- 加上当前怀孕状态(True=1,False=0) (CASE WHEN Pregnant THEN 1 ELSE 0 END), 3 -- 限制最大次数为3 ) AS pregnancy_count FROM your_table_name -- 替换为实际表名 ) AS pregnancy_stats GROUP BY pregnancy_count ORDER BY pregnancy_count DESC;
语句解释
- 子查询中:
- 用
CASE语句分别判断三个baby_dob字段是否非空,累加得到已出生婴儿的数量 - 把
Pregnant布尔值转为1或0,加到已出生数量上 - 用
LEAST函数把结果限制为不超过3,符合「最多统计3次」的要求
- 用
- 外层查询按计算出的怀孕次数分组,统计每组的女性人数,并按次数降序排列,和期望输出格式一致
内容的提问来源于stack exchange,提问作者user2875230
相关产品推荐
相关产品推荐

