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

如何拆分单列性别并分别统计:求女性平均体重及低于该值的男性数

解决方案

你现在的问题是把女性平均体重硬写成了固定值77,得改成动态获取这个平均值才行,下面给你几种可行的写法:

方法1:子查询直接嵌套

直接在统计男性的查询里嵌套计算女性平均体重的子查询,逻辑直观:

SELECT COUNT(patient_weight) AS under_avg_male_count
FROM patients
WHERE gender = 'M' 
  AND patient_weight < (
    SELECT AVG(patient_weight)
    FROM patients
    WHERE gender = 'F'
  );

子查询会先算出女性的平均体重,外层查询再用这个值筛选符合条件的男性并计数。

方法2:用CTE(公共表表达式)

如果后续逻辑需要扩展,用CTE可读性更好:

WITH FemaleAvgWeight AS (
    SELECT AVG(patient_weight) AS avg_female_weight
    FROM patients
    WHERE gender = 'F'
)
SELECT COUNT(patient_weight) AS under_avg_male_count
FROM patients
CROSS JOIN FemaleAvgWeight
WHERE gender = 'M' 
  AND patient_weight < avg_female_weight;

先把女性平均体重存到临时的CTE中,再和原表关联筛选目标数据。

方法3:用变量存储平均值(适用于SQL Server)

如果使用SQL Server,也可以先把平均值存入变量再调用:

DECLARE @avg_female_weight DECIMAL(10,2);
SET @avg_female_weight = (SELECT AVG(patient_weight) FROM patients WHERE gender = 'F');

SELECT COUNT(patient_weight) AS under_avg_male_count
FROM patients
WHERE gender = 'M' AND patient_weight < @avg_female_weight;

另外补充:你的原代码里用了LIKE 'F',性别是固定枚举值,用=比LIKE更高效,因为LIKE是模糊匹配语法,这里完全没必要使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:16