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

SQL查询计算医疗事件占比仅返回0值,求技术解决方案

问题分析与解决

你遇到的占比全为0的问题,核心是SQL整数除法的截断特性:当两个整数相除时,结果会自动舍弃小数部分取整。你的原查询里COUNT(Severity)返回整数,158420也是整数,所以哪怕专科事件数不为0,只要小于158420,除法结果都会被截断为0。

修复方案

方案1:避免硬编码总事件数(推荐)

用子查询动态获取总事件数,既保证准确性,也不用手动维护数字:

WITH CTE_TotalEvents AS (
    SELECT COUNT(Severity) AS Total_Malpractice_Events
    FROM MedMal85
),
CTE_SpecialtyEvents AS (
    SELECT
        Specialty,
        COUNT(Severity) AS Total_Events
    FROM MedMal85
    GROUP BY Specialty
)
SELECT
    Specialty,
    Total_Events,
    -- 将事件数转为浮点型,触发浮点除法
    CAST(Total_Events AS FLOAT) / (SELECT Total_Malpractice_Events FROM CTE_TotalEvents) AS Percentage_of_Total_Events
FROM CTE_SpecialtyEvents;

方案2:直接修改除法运算

把硬编码的分母转为浮点型,让计算保留小数:

SELECT
    Specialty,
    COUNT(Severity) AS Total_Events,
    COUNT(Severity) / CAST(158420 AS FLOAT) AS Percentage_of_Total_Events
FROM MedMal85
GROUP BY Specialty;

补充说明

  • Severity的tinyint类型不影响COUNT的结果,COUNT是统计非NULL的行数,和字段值无关;你之前转float的操作对COUNT没有意义,问题出在除法的类型上。
  • 如果需要百分比格式(比如保留两位小数),可以用FORMAT函数进一步处理:FORMAT(CAST(Total_Events AS FLOAT)/Total_Malpractice_Events, 'P2')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:42:09