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

如何验证两次SQL查询的正确性?含就诊次数与间隔分析场景

验证两次SQL查询正确性的方法

一、你提到的首行患者数校验逻辑完全合理

第一个查询的num_people总和是5+3+2+1+1=12,对应数据库里的总患者数;第二个查询首行current_visit=NA的分组,统计的是所有患者的「首次就诊阶段」(没有前序就诊记录),患者数必然等于总患者数,这是验证两次查询数据一致性的核心基础校验点。

二、第一次查询的验证步骤

第一次查询是「按患者分组统计就诊次数,再按就诊次数分组统计对应患者数」,可以从这几个维度验证:

  • 核对总就诊记录数:计算num_visits * num_people的总和:1×5 + 2×3 + 3×2 + 4×1 + 5×1 = 26,这个数必须和hospital_visits表的总记录数一致,直接用SELECT COUNT(*) FROM hospital_visits;就能验证。
  • 核对总患者数:第一个查询的num_people总和是12,要等于SELECT COUNT(DISTINCT patient_id) FROM hospital_visits;的结果,确保没有重复统计患者。
  • 抽样验证:随机挑几个不同就诊次数的患者,比如找1个就诊5次的患者,手动数他在表中的记录数是不是5;找3个就诊2次的患者,确认每个的记录数都是2,验证分组统计的准确性。

三、第二次查询的验证步骤

第二次查询是「分析患者连续就诊间隔,按就诊阶段分组统计患者数与平均间隔」,验证逻辑如下:

  • 各阶段患者数的逻辑匹配:
    • 阶段(1,2)的患者数是7,对应第一个查询中「就诊次数≥2」的患者数:3+2+1+1=7,必须完全匹配——只有就诊至少2次的患者,才会有第1到第2次的就诊间隔。
    • 阶段(2,3)的患者数是4,对应「就诊次数≥3」的患者数:2+1+1=4,匹配。
    • 阶段(3,4)的患者数是2,对应「就诊次数≥4」的患者数:1+1=2,匹配。
    • 阶段(4,5)的患者数是1,对应「就诊次数=5」的患者数:1,匹配。
      这些对应关系是判断第二次查询分组逻辑正确的关键。
  • 平均间隔天数的验证:
    • 随机选某个阶段的患者,比如阶段(1,2)的7个患者,手动计算每个患者第一次和第二次就诊的间隔天数,再求平均值,看是否接近59.4。
    • 检查是否存在间隔天数为负数的异常数据(比如就诊日期顺序写反),如果有,说明标记就诊顺序的窗口函数逻辑可能出错(比如应该用ROW_NUMBER() OVER(PARTITION BY patient_id ORDER BY visit_date)来排序就诊记录)。
  • 空值逻辑验证:current_visit=NA的分组只有next_visit=1,且没有平均间隔,符合首次就诊没有前序记录的逻辑;最后一个阶段(4,5)没有后续阶段,对应就诊次数最多为5次的结果,逻辑自洽。

四、交叉验证的补充思路

  • 用第一个查询的结果推导第二个查询各阶段的理论患者数,再和实际结果对比(就是上面的各阶段对应关系),如果完全匹配,说明两次查询的患者分组逻辑一致。
  • 统计第二个查询中所有num_people的总和:12+7+4+2+1=26,这个数要等于总就诊记录数——因为每个就诊记录对应一个阶段(首次就诊对应NA→1,后续每次就诊对应前一次到当前的阶段),这也是一个有效的校验方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:23:21