You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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;

语句解释

  1. 子查询中:
    • 用CASE语句分别判断三个baby_dob字段是否非空,累加得到已出生婴儿的数量
    • 把Pregnant布尔值转为1或0,加到已出生数量上
    • 用LEAST函数把结果限制为不超过3,符合「最多统计3次」的要求
  2. 外层查询按计算出的怀孕次数分组,统计每组的女性人数,并按次数降序排列,和期望输出格式一致

内容的提问来源于stack exchange,提问作者user2875230

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:02:23