医数智联·第 09 期:MySQL + 首页主诊错误率 —— 一份「院长能直接看」的月度分析全流程
[!ABSTRACT] 核心摘要
- 本期主题:把第 07、08 期的 SQL 技能串起来,从「写查询」到「出一份院长能直接看的月度主诊错误率报告」
- 核心结论:首页主诊错误率 = 主诊错误病案数 / 总病案数 × 100%,但真正的实战要回答 5 个 Why
- 5 大分析维度:总量、科室、医生、错误类型、时间趋势
- 5 步分析流程:数据提取 → 总体统计 → 维度下钻 → 错误归因 → 报告输出
- 阅读时长:约 10 分钟
一、场景引入:院长要「一份错误率报告」,背后要回答的 5 个 Why
[!example] 一个真实的周一早晨
院长办公室,周一 8 点 30。院长:「上月首页主诊错误率多少?」
质管办小张:「2.3%。」(他自己刚跑的数据)
院长:「哪个科室最高?」
小张:「骨科。」
院长:「为什么?」
小张:「……我查一下。」
1 小时后,小张回复:
「骨科错误数 28 条,其中主诊未选主要诊断 18 条,占比 64%;主诊 ICD 编码错误 10 条,占比 36%。责任医生 Top 3 是李医生、张医生、王医生,都是高年资主治。」
院长:「怎么改?」
小张:「……我再想想。」
院长要的不是「一个数字」,而是一个完整的分析故事:
| Why | 问题 | 数据维度 |
|---|---|---|
| Why 1 | 上月错误率多少? | 总体统计 |
| Why 2 | 哪个科室最高? | 科室维度 |
| Why 3 | 哪些医生是高发? | 医生维度 |
| Why 4 | 主要错误类型是什么? | 错误归因 |
| Why 5 | 趋势是升是降? | 时间趋势 |
[!quote] 狼叔的判断
“一份合格的主诊错误率报告,不是’一个数字’,而是’一个故事’。” 这一期,带你用 5 步流程,跑出完整的月度分析。
二、工具原理:首页主诊错误率分析的核心思路
2.1 关键指标定义
[!info] 核心指标
首页主诊错误率 = 主诊错误病案数 / 总出院病案数 × 100%配套指标:
- 绝对错误数:主诊错误病案数(条)
- 错误类型分布:各类错误占总数的比例
- 责任医生分布:Top N 医生 + 错误数
- 科室分布:各科室错误率对比
2.2 数据源说明
[!TIP] 医院常见数据源(假设表结构)
表名 关键字段 说明 首页主表病案号、出院日期、科室、责任医生工号、主诊 ICD、主诊错误标记 病案首页主表 医生表医生工号、医生姓名、职称、所属科室 医生主数据 错误代码表错误代码、错误描述、错误类型 错误类型字典 病案审核表病案号、审核日期、错误代码、错误分值 审核记录
[!warning] 实际表名和字段名以你院 HIS 系统为准
下面的 SQL 用了通用命名,实际用时改成你院的真实表名。
2.3 5 步分析流程
[!example] 5 步流程
- Step 1:数据提取 —— 锁定时间范围,提取主诊错误的病案
- Step 2:总体统计 —— 总错误数、总错误率
- Step 3:维度下钻 —— 按科室、医生、错误类型拆分
- Step 4:错误归因 —— 找 Top 错误类型,找 Top 医生
- Step 5:趋势分析 —— 对比上月/去年同期
三、医院实战:5 步完整 SQL
Step 1:数据提取
1 | -- 上月所有出院病案(主表数据) |
[!TIP] 用 TEMPORARY TABLE 暂存中间结果
避免反复跑同一段 SQL,性能提升 3-5 倍。
Step 2:总体统计
1 | -- 总体错误率 |
典型输出:
1 | | 总病案数 | 错误病案数 | 错误率_百分比 | |
Step 3a:科室维度下钻
1 | SELECT |
典型输出:
1 | | 科室 | 总病案数 | 错误数 | 错误率_百分比 | |
Step 3b:医生维度下钻(Top 10)
1 | SELECT |
典型输出:
1 | | 医生工号 | 医生姓名 | 职称 | 科室 | 错误数 | |
Step 3c:错误类型维度下钻
1 | SELECT |
典型输出:
1 | | 错误类型 | 错误描述 | 错误数 | 占比百分比 | |
Step 4:错误归因 + Top 医生
[!example] 实战:把「错误类型 × 责任医生」交叉分析
这一步是回答院长的「为什么」的关键。
1 | SELECT |
典型发现:
- 李医生的 12 条错误中,8 条是「主诊未选主要诊断」——说明是诊断选择习惯问题;
- 张医生的 9 条错误中,6 条是「主诊 ICD 与性别不符」——说明是编码规范性问题。
Step 5:趋势分析(对比上月 + 去年同期)
1 | WITH 本月 AS ( |
四、避坑指南:5 个真实业务中容易踩的坑
[!warning] 雷区 ①:用
COUNT(*)而不是COUNT(DISTINCT 病案号)
症状:一份病案有 2 条审核记录时,错误数被算成 2。
解决:用COUNT(DISTINCT 病案号)去重。
[!warning] 雷区 ②:百分比忘记乘 100
症状:错误率显示0.023,应该是2.3%。
解决:乘以 100.0(整数除法会丢精度)。
[!warning] 雷区 ③:对全院统计时忘记排除「日间手术」「死亡病案」
症状:把日间手术也算进错误率,基数被拉低,数字失真。
解决:明确统计口径,建议在 SQL 里加WHERE 病案类型 = '常规住院'。
[!warning] 雷区 ④:JOIN 后字段名歧义
症状:多张表都有科室字段,SQL 报 ambiguous(模糊)。
解决:所有字段加表别名:a.科室、b.科室。
[!warning] 雷区 ⑤:跑大数据量 SQL 不加 LIMIT
症状:SQL 跑了 10 分钟还没出来。
解决:先用 LIMIT 100 调试,确认逻辑后再放开。
五、把 SQL 输出变「报告」
[!TIP] 报告输出 3 种方式
方式 ①:直接复制到 Excel
GUI 工具 → 运行 SQL → 结果集 → 右键「导出 CSV」 → 打开 Excel 排版方式 ②:用 Navicat 定时邮件
配置「查询计划」→ 设置每日/每周定时 → 自动发送邮件方式 ③:Python 自动生成 PDF(后续第 20 期讲)
用 pandas 处理 SQL 结果 + matplotlib 画图 + reportlab 输出 PDF
六、下期预告
[!quote] 第 10 期
MySQL + DRG 入组异常筛查 —— 让医保结算少扣钱讲怎么用 SQL 找出 DRG 入组异常病例(低码高套、误入组、歧义病例),这是医保结算的「关键防线」。
[!TIP] 互动
如果你觉得这篇「医数智联·第 09 期」对你有用,请点赞、在看、转发给科里的同事。我是白衣狼,一个用数字化工具把医院管理做「轻」的实战派。咱们下期见。





