如何从同一列中分离出两种性别并分别使用



我有一个表,其中一列有性别(M、F、O(,另一列有患者体重。我需要得到雌性的平均体重,然后显示所有体重低于雌性平均体重的雄性的计数。以下是我目前所拥有的:

SELECT top 50 * 
FROM 
dbo.patients
SELECT
AVG(patient_weight)
FROM 
patients
WHERE gender LIKE 'F';
SELECT
COUNT
(patient_weight)
FROM 
patients
WHERE gender LIKE 'M' AND patient_weight < 77

由于具有女性平均权重的查询将返回标量值。你可以直接用它作为男性患者体重的标准

SELECT
COUNT(*) number_of_malepatients_below_avg
FROM 
patients
WHERE gender LIKE 'M' AND patient_weight < (SELECT
AVG(patient_weight)
FROM 
patients
WHERE gender LIKE 'F');

另一个选项是使用窗口函数。我只建议在基表上没有索引的情况下这样做,因为@nbk提供的子查询版本可能会更快。

SELECT
COUNT(*) MaleBelowAvgFemaleWeight
FROM (
SELECT *,
AVG(CASE WHEN gender = 'F' THEN patient_weight END) OVER () AS AvgFemaleWeight
FROM patients p
) p
WHERE gender = 'M' AND patient_weight < AvgFemaleWeight;

最新更新