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

SQL中使用AVG函数计算男性患者占比的逻辑解析

详解AVG(gender = 'M')计算男性患者占比的逻辑

问题背景

需要计算男性患者占总患者的比例,结果保留两位小数并以百分比形式展示。

网站提供的解法

SELECT
   round(100 * avg(gender = 'M'), 2) || '%' AS percent_of_male_patients
FROM patients;

AVG函数在这里的工作原理

在多数SQL方言中,布尔表达式会自动转换为数值类型:

  • 当gender = 'M'成立时,表达式结果为TRUE,会被转为数值1
  • 当表达式不成立时,结果为FALSE,会被转为数值0

AVG()函数会计算所有行中这些数值的平均值,也就是「男性患者数量 ÷ 总患者数量」,直接得到男性患者的占比(小数形式,比如占35%就会得到0.35)。

后续的100 * ...是把小数占比转为百分比数值,round(...,2)保留两位小数,最后用|| '%'拼接百分号,得到格式化后的百分比字符串。

你的解法逻辑

SELECT CONCAT(ROUND((SUM(CASE WHEN gender='M' THEN 1.0 ELSE 0.0 END)/COUNT(DISTINCT patient_id))*100,2) , '%') PERCENT
FROM patients

你的写法是统计占比的标准实现方式:用CASE语句标记男性患者为1、非男性为0,通过SUM得到男性总数;除以总患者数(如果patient_id是唯一主键,用COUNT(*)会更高效)后乘以100得到百分比,最后格式化输出。这个逻辑完全正确,和网站解法的计算结果一致,只是实现思路不同。

内容的提问来源于stack exchange,提问作者Zaw Lynn Htut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:38